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 시스템에서 작동하는지 확실하지 않지만.

관련 정보