bash 스크립트: 여러 OR 조건이 예상대로 작동하지 않는 경우

bash 스크립트: 여러 OR 조건이 예상대로 작동하지 않는 경우

아래 스크립트의 경우 "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.

사용자가 , , 중 하나인 경우 "나머지 스크립트를 실행"하려면 abcOR를 사용하고 AND 조건을 반대로 하거나 동일하게 유지하고 AND를 사용해야 합니다.xyzpqr==ifelse

따라서 다음 중 하나를 수행하세요.

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
...

관련 정보