bash 스크립트에서 조건을 무효화
나는 bash를 처음 사용하고 다음 명령을 부정하려고 노력하고 있습니다.
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
인터넷에 연결되어 있으면 조건이 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; }
숫자를 비교하기 때문에 산술 표현식 을 사용하면 매개 변수를 쉽게 처리하고 비교할 수 있습니다.
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
그러나 이것은 저장된 키 입력보다 더 많은 사람들을 혼란스럽게 할 수 있습니다.
(( ... ))
구조체는 배시에 사용할 수 있지만 필요하지 POSIX 쉘 사양 (비록 가능한 확장으로 언급).
이것은 모두 Cole의 답변 과 Steven의 답변 과 $?
같이 내 의견 으로는 피하는 것이 좋습니다 .
다음 -ne
대신에 다른 비교 를 사용할 수 있습니다 -eq
.
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
echo "Sorry you are Offline"
exit 1
fi
참고 URL : https://stackoverflow.com/questions/26475358/negate-if-condition-in-bash-script
'Programing' 카테고리의 다른 글
Object.create (null)로 JS 객체를 생성합니까? (0) | 2020.06.25 |
---|---|
iPhone SDK : loadView와 viewDidLoad의 차이점은 무엇입니까? (0) | 2020.06.25 |
C ++ 상속-액세스 할 수없는 기본? (0) | 2020.06.25 |
찾기에서 exec와 함께 세미콜론 (;) 대 더하기 (+) 사용 (0) | 2020.06.25 |
data.frame 열을 벡터로 변환 하시겠습니까? (0) | 2020.06.25 |