programing

bash 스크립트의 조건인 경우 negate

minimums 2023. 5. 23. 21:43
반응형

bash 스크립트의 조건인 경우 negate

다음 명령을 무시하려고 합니다.

wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
        echo "Sorry you are Offline"
        exit 1

인터넷에 연결되어 있으면 이 if 조건이 true로 반환됩니다.나는 그것이 반대로 일어나기를 원하지만 퍼팅.!아무데나 효과가 없는 것 같습니다.

선택할 수 있는 항목:

if [[ $? -ne 0 ]]; then       # -ne: not equal

if ! [[ $? -eq 0 ]]; then     # -eq: equal

if [[ ! $? -eq 0 ]]; then

!다음 식의 반환을 각각 반전합니다.

낫다.

if ! wget -q --spider --tries=10 --timeout=20 google.com
then
  echo 'Sorry you are Offline'
  exit 1
fi

만약 당신이 게으르다면, 여기 조건을 다루는 간결한 방법이 있습니다.||(또는) 및&&(및) 수술 후:

wget -q --tries=10 --timeout=20 --spider http://google.com || \
{ echo "Sorry you are Offline" && exit 1; }

동일하지 않은 비교를 사용할 수 있습니다.-ne대신에-eq:

wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
    echo "Sorry you are Offline"
    exit 1
fi

숫자를 비교할 때 산술 표현식을 사용할 수 있으므로 매개 변수를 보다 쉽게 처리하고 비교할 수 있습니다.

wget -q --tries=10 --timeout=20 --spider http://google.com
if (( $? != 0 )); then
    echo "Sorry you are Offline"
    exit 1
fi

대신 방법에 주목하십시오.-ne그냥 사용할 수 있습니다.!=산술적인 맥락에서, 우리는 심지어 앞에 추가할 필요도 없습니다.$매개 변수, 즉,

var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"

완벽하게 잘 작동합니다.이는 다음에 적용되지 않습니다.$?하지만 특별한 매개 변수.

더 나아가서는(( ... ))0이 아닌 값을 true로 평가합니다. 즉, 0이 아닌 값에 대한 반환 상태는 0이고 반환 상태는 1입니다. 그렇지 않으면 다음으로 단축할 수 있습니다.

if (( $? )); then

하지만 이것은 저장된 키 입력의 가치보다 더 많은 사람들을 혼란스럽게 할 수 있습니다.

(( ... ))construct는 Bash에서 사용할 수 있지만 POSIX사양(가능한 확장으로 언급됨)에서 필요하지 않습니다.

이 모든 말이 나왔듯이, 이 모든 것을 피하는 것이 좋습니다.$?콜의 대답과 스티븐의 대답처럼 모두 제 생각에 그렇습니다.

언급URL : https://stackoverflow.com/questions/26475358/negate-if-condition-in-bash-script

반응형