#!/usr/dt/bin/dtksh
while getopts w:m: option
do
case $option in
w) wflag=1
wval="$OPTARG";;
m) mflag=1
mval="$OPTARG";;
?) printf 'BAD\n' $0
exit 2;;
esac
done
if [ ! -z "$wflag" ]; then
printf "W and -w arg is $wval\n"
fi
if [ ! -z "$mflag" ]; then
printf "M and -m arg is $mval\n"
fi
shift $(($OPTIND - 1))
printf "Remaining arguments are: $* \n"
at $wval <<ENDMARKER
echo $* >> Search_List
tr " " "\n" <Search_List >Usr_List
while true; do
if [ -s Usr_List ]; then
for i in $(cat Usr_List); do
if finger -m | grep $i; then
echo '$i is online' | elm user
sed '/$i/d' <Usr_List >tmplist
mv tmplist Usr_List
fi
done
else
break
fi
done
ENDMARKER
本質的には、空になるまで探し続けたいと思っています。リストの要素が見つかるたびに削除されます。リストが空になったら終了します。
コマンドを最初に実行したときにエラー メッセージは表示されず、at ジョブの出力を含む電子メールにのみ表示されます。
事前にアドバイスをありがとう
編集: スクリプトは getopts を使用し、-w の引数と -m の引数を 1 つ取ります。w 値は at ジョブの時間として設定されますが、m は引き続き使用する必要があります。m の後の引数は Search_List というファイルに送信され、Search_List は編集されて Usr_List として保存されます。次に while ループで、Usr_List が空でない間、スクリプトは finger -m の結果を Usr_List の名前と照合します。名前が見つかった場合は、Usr_List から削除されます。Usr_List が空になると、プログラムは停止します。
elm は電子メールを送信する方法なので、elm ユーザーはユーザーに電子メールを送信します。
エラーは次のとおりです。
while: 式の構文