グループに属するユーザーがシステムをシャットダウンできるグループを追加したいと思います。システムは、古い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システムで動作しているかどうかはわかりませんが。