systemVの古いスクリプト

systemVの古いスクリプト

グループに属するユーザーがシステムをシャットダウンできるグループを追加したいと思います。システムは、古いbourne shを持つ古いsysv unixです。私がやった

{
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

システムのルートまたはユーザーがスクリプトを実行すると「OK」と表示され、それ以外の場合は「NO」と表示されますが、なぜ機能しないのですか?

ベストアンサー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システムで動作しているかどうかはわかりませんが。

おすすめ記事