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