중첩된 if를 만드는 방법 [닫기]

중첩된 if를 만드는 방법 [닫기]

스크립트를 사용하여 나만의 명령을 생성하려고 하는데 다른 스크립트에서 if를 생성하는 올바른 방법에 대해 약간 의문이 듭니다. 아래 코드는 내가 이 작업을 수행하는 방법을 보여 주지만 옳지 않은 것 같습니다.

#!/bin/bash

if test -z $1
then
    echo "Wrong usage of command, to check proper wars user -h for help."
    exit
else
    if test "$1"="-h"
    then
        echo "OPTIONS:  -h (help), -a (access point MAC), -c (current target[s] MAC[s])
"
        exit
    fi

    if test "$1"="-c"
    then
        echo "Usage error, access point MAC comes first."
        exit
    fi
fi

답변1

중첩된 if문은 대부분 괜찮아 보이지만 테스트가 스크립트가 "작동하지 않는" 원인일 수 있습니다.

test귀하의 s를 bash [[확장 테스트 명령 으로 변경했습니다 .

또한 if단일 if elif.

#!/bin/bash

if [[ -z "$1" ]]
then
    echo "Wrong usage of command, to check proper wars user -h for help."
    exit
else
    if [[ "$1" == "-h" ]]
    then
        echo -e "OPTIONS:  -h (help), -a (access point MAC), -c (current target[s] MAC[s])\n"
        exit
    elif [[ "$1" == "-c" ]]
    then
        echo "Usage error, access point MAC comes first."
        exit
    fi
fi

테스트는 와 테스트 문자열 사이에 공백이 있어야 하지만, bash에서 스크립팅하는 경우 $1bash 테스트를 사용하는 것이 더 낫다고 생각합니다. 내장 함수의 작동 방식에 대한 몇 가지 예 [[는 다음과 같습니다 .test

$ test true && echo yes || echo no
yes
$ test false && echo yes || echo no
yes
$ test true=false && echo yes || echo no
yes
$ test true = false && echo yes || echo no
no

또한 이 경우에는 if중첩 조건이 전혀 필요하지 않다고 생각합니다. 이를 다음과 같이 단순화할 수 있습니다.

#!/bin/bash

if [[ "$1" == "-h" ]]; then
    echo -e "OPTIONS:  -h (help), -a (access point MAC), -c (current target[s] MAC[s])\n"
    exit
elif [[ "$1" == "-c" ]]; then
    echo "Usage error, access point MAC comes first."
    exit
else
    echo "Wrong usage of command, to check proper wars user -h for help."
    exit
fi

관련 정보