gpt4 book ai didi

linux - 我在 unix 中 at 作业的输出中不断收到 'while syntax' 错误,我不知道为什么

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:42 26 4
gpt4 key购买 nike

#!/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 分别采用一个参数,w 值设置为 at 作业的时间,m 仍然必须使用。 m 后面的任何参数都会发送到名为 Search_List 的文件,Search_List 会被编辑并保存为 Usr_List。然后,在 while 循环中,当 Usr_List 不为空时,脚本会根据 Usr_List 中的名称检查 Finger -m 的结果。如果找到某个名称,则会将其从 Usr_List 中删除。一旦 Usr_List 为空,程序应该停止。

elm 是一种发送电子邮件的方式,因此 elm 用户向用户发送电子邮件。

错误是:

while: Expression syntax

最佳答案

at 默认使用/bin/sh。

at  now <<ENDMARKER

<code here>

ENDMARKER

所有这些都在/bin/sh 下执行,在某些系统上可以是 Bourne Shell(例如 Solaris)。您需要弄清楚/bin/sh 对于您的系统来说是什么,然后进行相应的修改。另外,请阅读有关您的“at”环境中存在和不存在的内容的保证。我认为问题就出在这里。您同时拥有 UNIX 和 linux 标签。所以我无法提供比这更多的帮助。

您可以按照您需要的方式启用 at 代码块的日志记录:

exec 2&>1 > /tmp/somefile.log

然后将调试消息写入 stdout 或 stderr。

关于linux - 我在 unix 中 at 作业的输出中不断收到 'while syntax' 错误,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com