请教一个shell里面宏定义执行问题
看linux unix shell学习笔记里面关于until的用法
下面的语句为不断搜索root用户是否登录了,如果登录了就停止搜索并发邮件通知sunmoon
$cat testuntil
#!/bin/sh
#testuntil
IS_ROOT=`who | grep root`
until [ "$IS_ROOT" ]
do
sleep 5
done
echo “watch it. root is in” | mail sunmoon
有下面个疑问
IS_ROOT=`who | grep root`
这句在执行完了之后IS_ROOT的值就已经被写死了,如果当前没有root用户until [ "$IS_ROOT" ] 应该一直等于FALSE,不管以后有没有root登录,这个循环一直跑不去
如果这么修改就没有问题
#!/bin/sh
#testuntil
until [ "`who | grep root`" ]
do
sleep 5
done
echo “watch it. root is in” | mail sunmoon
如果我想用宏定义IS_ROOT来完成这个操作,该如何实现?
[解决办法]
那就是普通变量 干嘛叫宏?
#!/bin/sh#testuntilIS_ROOT=`who | grep root`until [ "$IS_ROOT" ]do sleep 5 IS_ROOT=`who | grep root`doneecho “watch it. root is in” | mail sunmoon
[解决办法]
没有写死的。
每次until [ "$IS_ROOT" ]
时都要解释$IS_ROOT,这时候要看IS_ROOT的值的话就需要·who |grep root·出场了