다른 간단한 명령처럼 [ ... ]
또는 test
인수 사이에 공백이 필요합니다.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
또는
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
제안
Bash에서는 [[ ]]
표현식의 일부가 아닌 한 따옴표가 필요하지 않을 수있는 변수로 단어 분할 및 경로 이름 확장을 수행하지 않으므로 대신 사용하는 것이 좋습니다.
[[ $# -ne 1 ]]
또한 인용되지 않은 조건 그룹화, 패턴 일치 (와 확장 패턴 일치 extglob
) 및 정규식 일치 와 같은 다른 기능도 있습니다 .
다음 예제는 인수가 유효한지 확인합니다. 하나 또는 두 개의 인수를 허용합니다.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
순수한 산술 표현식의 경우, 사용하는 (( ))
일부 여전히 더 좋을 수 있지만, 그들은 여전히 가능 [[ ]]
처럼 그 산술 연산자와 -eq
, -ne
, -lt
, -le
, -gt
, 또는 -ge
단일 문자열 인수로 식을 배치하여 :
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
다른 기능과 결합 해야하는 경우 유용합니다 [[ ]]
.
스크립트 종료
유효하지 않은 매개 변수가 전달 될 때 스크립트를 종료하는 것도 논리적입니다. 이것은 이미에서 제안 된 의견 으로 ekangas 하지만 누군가가 그것을 가지고이 답변을 편집 -1
나뿐만 아니라 바로 그것을 할 수 있도록, 같은 반환 값.
-1
그러나 Bash가 주장으로 받아 들여지 exit
는 것은 명시 적으로 문서화되어 있지 않으며 일반적인 제안으로 사용될 권리가 아닙니다. 64
이 정의 이후 가장 공식적인 값도 sysexits.h
와 함께 #define EX_USAGE 64 /* command line usage error */
. 대부분의 도구 는 잘못된 인수를 ls
반환 2
합니다. 나는 또한 2
스크립트 로 돌아 왔지만 최근에는 더 이상 걱정하지 않고 1
모든 오류에 사용 되었습니다. 그러나 2
가장 일반적이며 아마도 OS별로 다르기 때문에 여기에 배치합시다 .
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
참고 문헌
test
. 이것이 표준 유닉스 명령의 이름입니다.