조건문에서 스크립트를 종료하는 방법은 무엇입니까?

조건문에서 스크립트를 종료하는 방법은 무엇입니까?

bash 스크립트를 작성 중인데 사용자가 루트가 아닌 경우 스크립트를 종료하고 싶습니다. 조건은 정상적으로 실행되지만 스크립트가 종료되지 않습니다.

[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)

&&대신 사용해 보았지만 ;둘 다 작동하지 않습니다.

답변1

다음을 수행할 수 있습니다.

[[ $(id -u) -eq 0 ]] || { echo >&2 "Must be root to run script"; exit 1; }

(첫 번째 명령문에 산술 이진 연산자가 포함된 "일반" 조건식) 또는:

(( $(id -u) == 0 )) || { echo >&2 "Must be root to run script"; exit 1; }

(첫 번째 시험의 산술 평가).

변경 사항 ()-> {}-braces에 유의하세요.아니요서브쉘을 생성합니다. ("서브쉘"을 검색하세요 man bash.)

답변2

이 명령 주위의 괄호는서브쉘. 서브쉘은 "스크립트를 실행하려면 루트여야 합니다"라는 메시지를 표시하고 다음과 같이 말합니다.서브쉘종료합니다(더 이상 명령이 없기 때문에 이미 종료되었지만). 아마도 이 문제를 해결하는 가장 쉬운 방법은 다음을 사용하는 것입니다 if.

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

답변3

그리고세게 때리다:

[ $UID -ne 0 ] && echo "Must be root to run script" && exit 1

답변4

이것은 bash에서 도움이 될 수 있습니다

[oracle@rac1 ~]$ which bash
/bin/bash
[oracle@rac1 ~]$ cat test1.sh
if [ `id -u` != 0 ]
then
echo "Must be root to run the script
 "
exit
fi

관련 정보