分页: 1 / 1

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

发表于 : 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

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

发表于 : 2014-04-30 18:34
susbarbatus
跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的

代码: 全选

#!/bin/bash
#!/bin/sh
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。

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

发表于 : 2014-04-30 23:12
astolia
ubuntu里/bin/sh默认是dash,dash不提供$UID

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash

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

发表于 : 2014-05-04 14:53
糊涂的小强
susbarbatus 写了:跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的

代码: 全选

#!/bin/bash
#!/bin/sh
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
你的意思是 不要 sh 脚本名 来执行,而用./脚本名 来执行?

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

发表于 : 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

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

发表于 : 2014-05-04 15:10
susbarbatus
糊涂的小强 写了:
susbarbatus 写了:跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的

代码: 全选

#!/bin/bash
#!/bin/sh
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
你的意思是 不要 sh 脚本名 来执行,而用./脚本名 来执行?
bash abc.sh
或者,脚本第一行写的是 #!/bin/bash 的话,可以 ./abc.sh

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

发表于 : 2014-05-04 15:11
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 试试看

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

发表于 : 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