当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 普通用户执行shell script,为什么不能获取 $UID--已解决
帖子发表于 : 2008-02-29 11:08 
头像

注册: 2007-07-09 16:56
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
部分代码:
LOG_DIR=/var/log # Variables are better than hard-coded values.
ROOT_UID=0 # Only users with $UID 0 have rot privileges.
LINES=50 # Default number of lines saved.
E_XCD=66 # Can't change directory?
E_NOTROOT=67 # Non-root exit error.

# Run as root, of course.
# Insert code here to print error message and exit if not root.
echo $ROOT_UID
echo $UID

if [ "$UID" -ne "$ROOT_UID" ]
hen
echo "Must be root to run this script."
exit $E_NOTROOT
else
echo "Current UID is: $UID."
exit $E_NOTROOT
fi


执行结果:
mg@mg-laptop:~/Work/Learning/Shell/AdvancedBashScriptingGuide$ sh cleanup
0

Current UID is: .

正常结果应该是1000:
mg@mg-laptop:~/Work/Learning/Shell/AdvancedBashScriptingGuide$ echo $UID
1000

为什么不能获取 $UID ?


mg@mg-laptop:~/Work/Learning/Shell/AdvancedBashScriptingGuide$ cat cleanup
#!/bin/bash
# Proper header for a Bash script.

# Cleanup, version 3

# Warning:
# ---------
# This script uses quite a number of features that will be explained
#+ later on.
# By the time you've finished the first half of the book,
#+ there should be nothing mysterious about it.

LOG_DIR=/var/log # Variables are better than hard-coded values.
ROOT_UID=0 # Only users with $UID 0 have rot privileges.
LINES=50 # Default number of lines saved.
E_XCD=66 # Can't change directory?
E_NOTROOT=67 # Non-root exit error.

# Run as root, of course.
# Insert code here to print error message and exit if not root.
echo $ROOT_UID
echo $UID
# current_uid=[id -- -u]
# echo $current_uid

if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Must be root to run this script."
exit $E_NOTROOT
else
echo "Current UID is: $UID."
exit $E_NOTROOT
fi

if [ -n "$1" ]; then
# Test if command line argument present (non-empty).
lines=$1
else
lines=$LINES # Default, if not specified on command line.
fi


# Stephane Chazelas suggests the following,
#+ as a better way of checking command line arguments,
#+ but this is still a bit advanced for this stage of the tutorial.
#
# E_WRONGARGS=65 # Non-numberical argument (bad arg format)
#
# case "$1" in
# "" ) lines=50;;
# *[!0-9]*) echo "Usage: 'basename $0' file-to-cleanup"; exit $E_WRONGARGS;;
# * ) lines=$1;;
# esac
#
#* Skip ahead to "Loops" chapter to decipher all this.


cd $LOG_DIR

if [ 'pwd' != "$LOG_DIR" ] # or if [ "$PWD" != "$LOG_DIR" ]
# Not in /var/log?
then
echo "Can't change to $LOG_DIR."
exit $E_XCD
fi # Doublecheck if in right directory, before messing with log file.

# far more efficient is:
#
# cd /var/log || {
# echo "Cannot change to necessary directory." >$2
# exit $E_XCD;
# }


tail -$lines messages > mesg.temp # Saves last section of message log file.
mv mesg.temp messages # Becomes new log directory.


#cat /dev/null > messages
#* No longer needed, as the above method is safer.

cat /dev/null > wtmp # ': > wtmp' and '> wtmp' have the same effect.
echo "Logs cleaned up."


exit 0 # The right and proper method of "exiting" from a script.
# A zero return value from the script upon exit indicates success to the shell.


最后由 marlgl 编辑于 2008-02-29 12:50,总共编辑了 4 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-02-29 11:11 
头像

注册: 2007-03-13 17:26
帖子: 2254
送出感谢: 0 次
接收感谢: 1
UID 是bash的东西吧

在脚本里用 `id -u`


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-02-29 11:23 
头像

注册: 2007-07-09 16:56
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
#!/bin/bash
# Proper header for a Bash script.

# Cleanup, version 3

我是在bash里
我copy Advanced Bash-Scripting Guide 中的例子, 为什么不行?


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-02-29 12:32 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
试了一下可以的
你的脚本出什么错误信息


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-02-29 12:39 
头像

注册: 2007-07-09 16:56
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
得不到 $UID (1000) 的值


谢谢上面两位的解答

问题找到了: bash cleanup 而不是 sh cleanup

低级错误


最后由 marlgl 编辑于 2008-02-29 12:49,总共编辑了 1 次

页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-02-29 12:42 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
marlgl 写道:
得不到 $UID (1000) 的值


整个输出贴出来..
你怎么知道得不到呢?


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-02-29 12:51 
头像

注册: 2007-07-09 16:56
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
谢谢

问题找到了: bash cleanup 而不是 sh cleanup

低级错误


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-04-10 14:24 

注册: 2008-04-10 14:21
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
#!/bin/bash


LOG_DIR=/var/log
ROOT_UID=0
LINES=50
E_XCD=66
E_NOTROOT=67


echo $ROOT_UID
echo $UID

if ["$UID" -ne "$ROOT_UID"]
then
echo "Must be root to run this script."
exit $E_NOTROOT

else

echo "Current UID is :$UID."
exit $E_NOTROOT


我是这样写的,但执行结果为:0
0
root: line 14: [0: command not found
Current UID is :0.

14行为:if ["$UID" -ne "$ROOT_UID"]
我用的是as4请大家帮助,我是初学者。
并且问下LINES=50
E_XCD=66
E_NOTROOT=67这里定义的数字是什么意思,是shell自带的吗?
谢谢大侠帮组下。


页首
 用户资料  
 
9 楼 
 文章标题 : 接上
帖子发表于 : 2008-04-10 14:34 

注册: 2008-04-10 14:21
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
我在我的as4系统建立个系统帐号,并给此脚本该帐号有执行权限,但输出的结果是:
0
12353
./root: line 14: [12353: command not found
Current UID is :12353.

应该至少的输出Must be root to run this script才对呀,希望得到帮助、


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-07-23 16:21 

注册: 2008-04-10 14:21
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
LOG_DIR=/var/log
ROOT_UID=0
LINES=50
E_XCD=66
E_NOTROOT=67

echo $ROOT_UID
echo $UID

if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Must be root to run this script."
exit $E_NOTROOT
else
echo "Current UID is :$UID."
exit $E_NOTROOT
fi


我操现在可以了。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译