我在Ubuntu下写了个Shell,想要根据登录用户不同判断是否有执行某操作的权限。基本代码如下:

点击(此处)折叠或打开

  1. # !/bin/bash
  2. ROOT_UID=0
  3. if [ "$UID" -ne "$ROOT_UID" ]
  4.   then
  5.      echo "cannot execute this script."
  6.      exit 1
  7. fi
  8. ......
当我使用sh xxx.sh执行时,报第三行存在无效数字。但给予脚本执行权限使用./xxx.sh却是正常的。
当时很迷惑,难道这两个执行方式有区别。
无意中,查看sh命令,发现他是指向Ubuntu的dash的链接,而不是bash。然后执行dash,再执行echo $UID发现确实是空的。问题原因找到。原来是在dash下没有UID环境变量。
看来各种shell的解释器还是有很大不同的。
特别记录下来分享给大家。
12-16 18:37