아래 스크립트의 경우 "abc" 사용자로 실행하면 스크립트가 "exit 1"을 실행해서는 안 됩니다. 여전히 "exit 1"을 실행하십시오.
if [ "$(whoami)" != "abc" ] || [ "$(whoami)" != "xyz" ] || [ "$(whoami)" != "pqr" ]
then
exit 1
else
echo "Run remaining script"
fi
답변1
bash 스크립트가 나에게 잘 작동하는 것 같습니다. 실행 중입니다. abc
이는 첫 번째 테스트가 false( abc
같음 abc
)임을 의미하므로 평가는 true( abc
같지 않음 xyz
)인 다음 테스트로 계속되고 스크립트는 을( 를) false || true || true
얻는 대로 종료됩니다 true
.
사용자가 , , 중 하나인 경우 "나머지 스크립트를 실행"하려면 abc
OR를 사용하고 AND 조건을 반대로 하거나 동일하게 유지하고 AND를 사용해야 합니다.xyz
pqr
==
if
else
따라서 다음 중 하나를 수행하세요.
if [ "$(whoami)" != "abc" ] && [ "$(whoami)" != "xyz" ] && [ "$(whoami)" != "pqr" ]
then
exit 1
else
echo "Run remaining script"
fi
또는:
if [ "$(whoami)" == "abc" ] || [ "$(whoami)" == "xyz" ] || [ "$(whoami)" == "pqr" ]
then
echo "Run remaining script"
else
exit 1
fi
답변2
이에 대한 대안은 다음과 같습니다.
case "$(whoami)" in
abc|xyz|pqr) : # we do nothing here,
;; # and exit the case
*) exit 1 # for all other values (*) : we exit 1, terminating the script
;;
esac
# here, we only continue if the case before had abc, xyz or pqr
...