我想添加一个组,允许所属组的用户关闭机器系统是旧的 sysv unix,带有旧的 bourne sh。我做到了
{
groufind=`groups|grep system|awk '{print $2}'`
}
groupscheck
eval `id | /usr/bin/sed 's/[^a-z0-9=].*//'`
if [ "$LOGNAME != "root" -o $groufind != "system" ];
then
echo "$0: Only root or system group can run /sbin/shutdown."
exit 2
fi
else
echo "$0: can't check user id."
exit 2
但不起作用,错误退出
/sbin/shutdown: test: argument expected
哪里错了?
抱歉,脚本不完整,我想要这样的作品
groupscheck()
{
groufind=`groups|grep system|awk '{print $2}'`
who=`id|cut -d "(" -f 2|cut -d ")" -f 1`
root=root
system=system
}
groupscheck
if [ $who != $root -o $groufind != $system ];
then
echo "OK"
else
echo "no"
fi
如果系统中的 root 或用户执行脚本,则给出“OK”,否则“否”,但为什么不起作用?
答案1
缺少一个引号...您应该真正检查您的代码,至少使用语法荧光笔。这条线...
if [ "$LOGNAME != "root" -o $groufind != "system" ];
应该:
if [ "$LOGNAME" != "root" -o $groufind != "system" ];
现在对于其余的,我将不得不猜测,因为您的代码示例毫无帮助:
- 一开始这个奇怪的范围可能就是
groupchecks
的定义。 - 我不太确定你打电话的原因
eval
。 - 我不明白为什么你
else
最后添加了一个分支,因为它没有匹配的if
.
不管怎样,我想说你的脚本可以简化为:
#!/bin/sh
groups $LOGNAME | grep system > /dev/null 2>&1
if [ $? -ne 0 -a "$LOGNAME" != "root" ]; then
echo "$0: Only root or system group can run /sbin/shutdown."
exit 1
else
echo "$0: Shutdown possible."
exit 0
fi
...尽管我不太确定所有这些是否都在旧的 SYSv4 系统上运行。