一个脚本实例出了点小问题,附源码和执行跟踪trace

sh/bash/dash/ksh/zsh等Shell脚本
回复
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

一个脚本实例出了点小问题,附源码和执行跟踪trace

#1

帖子 糊涂的小强 » 2014-04-30 17:11

-------------------------------------下面是源码
#!/bin/bash
#!/bin/sh
LOG_DIR="/var/log"
ROOT_UID=0
LINES=50
E_NOTROOT=67
if [ "$UID"x != "$ROOT_UID"x ]------这里的$UID为什么是null,echo $UID 是1啊
then
echo "Must be root run this script."
exit $E_NOTROOT
fi

if [ -n "$1" ]
then
lines=$1
else
lines=$LINES
fi
cd $LOG_DIR
if [ "$PWD" != "$LOG_DIR" ]
then
echo "can't change to $LOG_DIR"
exit $E_XCD
fi
tail -$lines messages > mesg.temp
cat /dev/null > messages
mv mesg.temp messages
cat /dev/null > wtmp
echo "logs cleaned up."
exit 0
---------------------------------下面是执行trace
+ LOG_DIR=/var/log
+ ROOT_UID=0
+ LINES=50
+ E_NOTROOT=67
+ [ x != 0x ]-------------------这里$UID结果是null
+ echo Must be root run this script.
Must be root run this script.
+ exit 67
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#2

帖子 susbarbatus » 2014-04-30 18:34

跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的

代码: 全选

#!/bin/bash
#!/bin/sh
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
沉迷将棋中……
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#3

帖子 astolia » 2014-04-30 23:12

ubuntu里/bin/sh默认是dash,dash不提供$UID

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#4

帖子 糊涂的小强 » 2014-05-04 14:53

susbarbatus 写了:跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的

代码: 全选

#!/bin/bash
#!/bin/sh
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
你的意思是 不要 sh 脚本名 来执行,而用./脚本名 来执行?
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#5

帖子 糊涂的小强 » 2014-05-04 14:54

astolia 写了:ubuntu里/bin/sh默认是dash,dash不提供$UID

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
那为什么 我echo $UID 可以显示出用户的id
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#6

帖子 susbarbatus » 2014-05-04 15:10

糊涂的小强 写了:
susbarbatus 写了:跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的

代码: 全选

#!/bin/bash
#!/bin/sh
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
你的意思是 不要 sh 脚本名 来执行,而用./脚本名 来执行?
bash abc.sh
或者,脚本第一行写的是 #!/bin/bash 的话,可以 ./abc.sh
沉迷将棋中……
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#7

帖子 susbarbatus » 2014-05-04 15:11

糊涂的小强 写了:
astolia 写了:ubuntu里/bin/sh默认是dash,dash不提供$UID

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
那为什么 我echo $UID 可以显示出用户的id
因为你执行 echo 用的终端开的 bash,
你可以先执行 sh,然后在 sh 再 echo 试试看
沉迷将棋中……
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace

#8

帖子 糊涂的小强 » 2014-05-04 17:12

susbarbatus 写了:
糊涂的小强 写了:
astolia 写了:ubuntu里/bin/sh默认是dash,dash不提供$UID

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
那为什么 我echo $UID 可以显示出用户的id
因为你执行 echo 用的终端开的 bash,
你可以先执行 sh,然后在 sh 再 echo 试试看
thank you
回复