
ユーザーのメール スプール ファイルのサイズを取得するプログラムを作成したいと考えています (Linux では、スプール ファイルは /var/spool/mail/$USER にあります)。これを実行するには、30 秒ごとに実行される連続ループを作成したいと思います。ループが実行されるたびに、メール スプール ファイルのサイズが前回のループのサイズと比較されます。新しいサイズが古いサイズより大きい場合は、「新しいメールがあります」というメッセージを出力します。
下記のスクリプトを書いたのですが、うまく動作しません。何かアドバイスはありますか?
while true
do
clear
size= ls -l /var/spool | wc -c
sleep 30
newsize= ls -l /var/spool | wc -c
if [$size < $newsize]
then
echo "You've got mail!"
else
echo "Sorry no mail yet"
fi
sleep 30
done &
答え1
bash では無限ループを使用できます。
while true ; do
# Your code here.
sleep 30;
done
チェックプログラムを定期的に実行するようにスケジュールすることもできます。クローン。
答え2
はい、30 秒間のスリープを伴う無限ループが必要です。次のスニペットで十分です。
#!/bin/bash
while true
do
# do any stuff you want
echo "doing my thing"
# sleep for 30 seconds
sleep 30
done
しかし、これを bash スクリプトで実行するのはおそらく望んでいることではないことがすぐにわかると思います。このようなタスクには通常、何らかの形のデーモンが必要です。
修正された質問に答えるために、期待どおりに動作するスクリプトのバリエーションを次に示します。
#!/bin/bash
while true
do
clear
size=$(ls -l /var/spool | wc -c)
sleep 30
newsize=$(ls -l /var/spool | wc -c)
if [ $size -lt $newsize ]
then
echo "You've got mail!"
else
echo "Sorry no mail yet"
fi
sleep 30
done