systemV 上的旧脚本

systemV 上的旧脚本

我想添加一个组,允许所属组的用户关闭机器系统是旧的 sysv unix,带有旧的 bo​​urne 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 系统上运行。

相关内容