그룹에 속한 사용자가 시스템을 종료할 수 있는 그룹을 추가하고 싶습니다. 시스템은 이전 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 시스템에서 작동하는지 확실하지 않지만.