답변:
if [[ $# -eq 0 ]] ; then
echo 'some message'
exit 0
fi
case "$1" in
1) echo 'you gave 1' ;;
*) echo 'you gave something else' ;;
esac
고급 Bash 스크립팅 가이드는 아주 좋은 것입니다. 이름에도 불구하고 기본을 다룹니다.
> /dev/null및 / 또는 2> /dev/null그 후 망각으로 표준 출력 및 / 또는 표준 오류 스트림을 보낼 수 있습니다.
exit 1)이 아닌 다른 것을 반환합니다 . 온라인에서 빠르게 찾을 수있는 반환 / 종료 코드에 대한 추가 규칙이 있지만 중요한 점은 성공을 나타내는 0이 아니어야한다는 것입니다.
if [ -z "$*" ]; then echo "No args"; fi
No args
-z 는 문자열 길이가 0 인 단항 연산자입니다.
$*모든 인수입니다. 따옴표는 안전을위한 것이며 여러 인수가있는 경우 캡슐화합니다.
이와 같은 더 많은 연산자를 사용하려면 "단항"을 사용 man bash하고 검색 ( / 키)하십시오.
-z으로 mizzing
오래되었지만 이전의 혼란 덕분에 답을 다시 작업해야 할 이유가 있습니다.
if [[ $1 == "" ]] #Where "$1" is the positional argument you want to validate
then
echo "something"
exit 0
fi
위치 인수 $ 1이 없으면 "Something"이 표시됩니다. 그러나 $ 1에 특정 정보가 포함되어 있는지 확인하지는 않습니다.
$#명시 적으로 인수 개수의 정수 개수입니다. "0"이되고 인수가 없더라도 "something"을 에코하거나 양수이고 "something"을 올바르게 에코합니다. 그러나 검사 자체는 사용하는 입력 또는 입력 부족에 관계없이 아무것도 수행하지 않습니다. 항상$# 값 이 포함 된 것으로 보고합니다 . 따라서 이것은 완전히 잘못된 것이며 주장대로 작동하지 않을 것입니다.
echo $#후, 스크립트 /tmp/test.sh의 내용으로 사용 가능한이 아니라 / 빈 / SH (또는 / 빈 / 대쉬와 어떤 다른 쉘 구현으로 / 아래 / 빈 떠들썩한 파티를 실행합니다. /tmp/test.sh에 "0"메아리 의지와 콘솔, /bin/dash /tmp/test.sh. 반면에, /tmp/test.sh foo"1"에코하며, /tmp/test.sh first second"2"에코됩니다.
man bash"특수 매개 변수"섹션에서 "쉘은 여러 매개 변수를 특별히 처리합니다. 이러한 매개 변수는 참조 만 가능하며 할당은 허용되지 않습니다."및 "# 십진수의 위치 매개 변수 수로 확장됩니다." 마찬가지로 pubs.opengroup.org/onlinepubs/9699919799/utilities/…에