Linux 我总是得到一个';而语法';unix中at作业的输出出错,我不知道原因 #/usr/dt/bin/dtksh 而getopts w:m:option 做 案例中的$option w) wflag=1 wval=“$OPTARG”;; m) mflag=1 mval=“$OPTARG”;; ?)printf'BAD\n'$0 出口2;; 以撒 完成 如果[!-z“$wflag”];然后 printf“W和-W参数为$wval\n” fi 如果[!-z“$mflag”];然后 printf“M和-M参数为$mval\n” fi 班次$($OPTIND-1)) printf“其余参数为:$*\n” 在$wval搜索列表中 tr“”“\n”Usr\U列表 虽然真实;做 如果[-s Usr_列表];然后 以美元为单位的i(cat Usr_列表);做 如果finger-m | grep$i;然后 echo“$i在线”| elm用户 sed'/$i/d'tmplist mv tmplist Usr\U列表 fi 完成 其他的 打破 fi 完成 终点标记
基本上,我想继续搜索,直到它是空的。每次找到列表中的一个元素时,它都会被删除。一旦列表为空,请退出 第一次运行命令时没有错误消息,它只显示在包含at作业输出的电子邮件中 提前谢谢你的建议 编辑:脚本使用getopts,并为-w和-m取一个参数,w值设置为at作业的时间,m仍然必须使用。m的参数之后的任何参数都被发送到名为Search_List的文件中,Search_List将被编辑并保存为Usr_List。然后在while循环中,当Usr_列表不为空时,脚本根据Usr_列表中的名称检查finger-m的结果。如果找到一个名称,它将从Usr_列表中删除。一旦Usr_列表为空,程序应停止 elm是发送电子邮件的一种方式,所以elm用户向用户发送电子邮件 错误是: while:表达式语法Linux 我总是得到一个';而语法';unix中at作业的输出出错,我不知道原因 #/usr/dt/bin/dtksh 而getopts w:m:option 做 案例中的$option w) wflag=1 wval=“$OPTARG”;; m) mflag=1 mval=“$OPTARG”;; ?)printf'BAD\n'$0 出口2;; 以撒 完成 如果[!-z“$wflag”];然后 printf“W和-W参数为$wval\n” fi 如果[!-z“$mflag”];然后 printf“M和-M参数为$mval\n” fi 班次$($OPTIND-1)) printf“其余参数为:$*\n” 在$wval搜索列表中 tr“”“\n”Usr\U列表 虽然真实;做 如果[-s Usr_列表];然后 以美元为单位的i(cat Usr_列表);做 如果finger-m | grep$i;然后 echo“$i在线”| elm用户 sed'/$i/d'tmplist mv tmplist Usr\U列表 fi 完成 其他的 打破 fi 完成 终点标记,linux,unix,loops,while-loop,ksh,Linux,Unix,Loops,While Loop,Ksh,基本上,我想继续搜索,直到它是空的。每次找到列表中的一个元素时,它都会被删除。一旦列表为空,请退出 第一次运行命令时没有错误消息,它只显示在包含at作业输出的电子邮件中 提前谢谢你的建议 编辑:脚本使用getopts,并为-w和-m取一个参数,w值设置为at作业的时间,m仍然必须使用。m的参数之后的任何参数都被发送到名为Search_List的文件中,Search_List将被编辑并保存为Usr_List。然后在while循环中,当Usr_列表不为空时,脚本根据Usr_列表中的名称检查finge
默认情况下,at使用/bin/sh
#!/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
然后将调试消息写入stdout或stderr。正在插入您的herdoc。尝试引用分隔符:
exec 2&>1 > /tmp/somefile.log
您需要将
-k
选项传递到at
:
if finger -m | grep \$i; then
。。。
在-k$wval时,while命令和if命令需要合并
...
at -k $wval <<ENDMARKER
...
shebang/usr/dt/bin/dtksh
是您所期望的吗?是ksh吗?我做的其他脚本都是ksh,它是korn Shell。最好用英语解释一下你想做什么,什么是elm
。用elm explained编辑请将准确的错误消息复制并粘贴到你的问题中。似乎at作业是使用/bin执行的/csh@user2177896的确请看我的回答。不幸的是如果finger-m | grep\$i;然后
似乎什么也没有改变。
if finger -m | grep \$i; then
...
at -k $wval <<ENDMARKER
...
while [[ -s Usr_List ]]; do
......
done