你好,我的 bash 有问题。我需要一个“脚本,它在后台工作,并且 sleep 60 将检查一个人(其登录被添加为参数)是否正在服务器上工作。当该人登录时,应该得到一个“你好”标志,以及此人上线的标志。”抱歉,翻译练习对我来说有点困难。
#!/bin/sh
who | cut -d " " -f1 | grep $1> /dev/null
z=$?
until [ $z -eq 0 ] ; do
sleep 10
who | cut -d " " -f1 | grep $1> /dev/null
z=$?
done
echo "hello $1" | write $1
我尝试在我的电脑上而不是学校服务器上运行它。是否可以?这是我回来的:
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
答案1
这是我的脚本版本。
#!/bin/sh
if [ $# -lt 1 ]
then echo Missing user name; exit 1
elif ! grep -q $1 /etc/passwd
then echo No such user: $1; exit 2
fi
until who | cut -d " " -f1 | grep -q $1
do sleep 10
done
echo "hello $1" | write $1
首先,我添加了检查是否存在有效的用户名。
该until
关键字需要一个管道,可以是test
程序,也称为[
.这就是你用的。然而,我只是使用了who|cut|grep
管道。当其退出状态为0时,循环停止。当它不为零时,循环继续。
另一个相当小的变化是添加了-q
.在我个人看来,这是获得与重定向到 /dev/null 相同结果的更好方法。