関数内で関数を呼び出す

関数内で関数を呼び出す

さまざまな時間範囲の結果を取得し、電子メールで結果を送信する必要がありますが、スクリプトの電子メール部分に問題があります。

これら2つの結果を含むEメールをどのように送信しますか? (15分の範囲と累積結果)は次のとおりです。

 echo -e "Enter Start hour : xx:00:00"#ask user to input base time
    read tI

    echo "Select minute range, Enter 1 to 4"#ask user to select minute range
    echo -e "\t1) XX:15:00 \n\t2) XX:15-30 | XX:30  \n\t3) XX:30-45 | xx:45 \n\t4) XX:45-00 | 1hour"
    read NUM

      if [ "$NUM" == "1" ] ; then
        for Time in "$tI:(0[0-9]|1[0-4]:[0-5][0-9]|$tI:15" ; do #time grep c/o of Caleb, thanks!
        mail
        done

      elif [ "$NUM" -eq "2" ] ; then
        for Time in "$tI:(1[5-9]|2[0-9]:[0-5][0-9]|$tI:30)" "$tI:([0-2][0-9]:[0-5][0-9]|$tI:30)" ; do # 2nd time was commulative 
        mail
        done

      elif [ $NUM -eq 3 ] ; then
        for Time in "$tI:(3[0-9]|4[0-4]:[0-5][0-9]|$tI:45)" "$tI:([0-3][0-9]||4[0-4]:[0-5][0-9]|$tI:45)" ; do
        mail
        done

      elif [ $NUM -eq 4 ] ; then
         tI=${tI#${tI%%[!0]*}}
         newTime=$((tI + 1))
         sTime=`printf '%02d\n' "$tI"`
         fTime=`printf '%02d\n' "$newTime"` # thanks to Gilles and Mark and geekosaur
         for Time in "$sTime:(4[5-9]|5[0-9]:[0-5][0-9]|$fTime:00)" "$sTime:([0-5][0-9]|[0-5][0-9]|$fTime:00)" ; do
         mail
        done
 else
   exit 1
  fi

exit 1

    function Count()
    {
    textfile="/some/path/to/text.txt"
    time="$1"
    C=0
    echo " " > $textfile
    for ((d=0; d<12; d++))
     do
     dec110=`egrep "$GivenDate $time" * | grep -c "$var ..  ${DECLINE[$d]}" | awk '{SUM += $1} END { print SUM }'`
     COUNT[$C]="$SUMdec"
          ((C++))
    .... so on and so fort
    echo -e "tons of to be echoed above /n end of the results to be emailed" >> $emessage
    }

今私の質問は次のとおりです。何度も試してみましたが、どれも正しく動作しないようです。

function mail()
{
   echo "declarations above of this | start of message" > $emessage
   for ((t=0; t<2; t++)) do
   Count "$Time"
   done
     /bin/mail -s "$SUBJECT" "$EMAIL" < $emessage
  echo -e "Email Sent!\n\n"
  cat $emessage
}

- これで1つのEメールが送信されますが、最初のgrepの結果のみが表示されます。

function mail()
{
   echo "Hi Team," > $emessage
   Count "$Time"
     /bin/mail -s "$SUBJECT" "$EMAIL" < $emessage
  echo -e "Email Sent! \n\n"
  cat $emessage
}

- オプション2〜4を選択すると、2つの別々の電子メールが送信されます。

メモ: スクリプトは電子メール部分なしでうまく機能します。

ベストアンサー1

まず、関数名を通常のシステムのコマンドと同じにしないでください。mailは標準的なUnixコマンドで、あなたがそれを使用していると思ったので、私はあなたのスクリプトを完全に誤解しました。

第二に、これらの内容をメッセージファイルにまったく書く必要はないかもしれません。代わりに、   mailスクリプトのどこからでも関数を削除してください。代わりに内容をSTDOUTにダンプしてください。送信するコンテンツを収集するために使用するその他のツールをecho使用してください。grep

その後、スクリプトの全部分(内部的にメールで送信する出力を含む)をラップして、{}すべての出力をまとめてメールでパイプするようにします。

echo "Enter start hour"
read var # stuff to do that won't get output to mail
{
echo "Heading for mail:"
grep stuff...
function_that_outputs
echo "Next heading:"
grep more_stuff...
another_function
} | send_to_administrator

function send_to_administrator () {
    /bin/mail -s "$SUBJET" "$EMAIL"
    echo "Confirm mail sent."
}    

おすすめ記事