日期:2014-05-16  浏览次数:20807 次

请教一个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来完成这个操作,该如何实现?

------解决方案--------------------
那就是普通变量 干嘛叫宏?
C/C++ code

#!/bin/sh
#testuntil
IS_ROOT=`who | grep root`
until [ "$IS_ROOT" ]
do
  sleep 5
  IS_ROOT=`who | grep root`
done
echo “watch it. root is in” | mail sunmoon

------解决方案--------------------
没有写死的。
每次until [ "$IS_ROOT" ]
时都要解释$IS_ROOT,这时候要看IS_ROOT的值的话就需要·who |grep root·出场了