스크립트를 사용하여 나만의 명령을 생성하려고 하는데 다른 스크립트에서 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에서 스크립팅하는 경우 $1
bash 테스트를 사용하는 것이 더 낫다고 생각합니다. 내장 함수의 작동 방식에 대한 몇 가지 예 [[
는 다음과 같습니다 .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