[bash] Bash 쉘 스크립트에서 입력 인수가 있는지 확인

입력 인수가 있는지 확인해야합니다. 다음 스크립트가 있습니다

if [ "$1" -gt "-1" ]
  then echo hi
fi

나는 얻다

[: : integer expression expected

입력 인수 1이 있는지 먼저 확인하는 방법은 무엇입니까?



답변

그것은:

if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

$#변수는 당신에게 스크립트가 전달 된 입력 인수의 수를 알려줍니다.

또는 인수가 빈 문자열인지 아닌지 확인할 수 있습니다.

if [ -z "$1" ]
  then
    echo "No argument supplied"
fi

-z“$ 1″의 확장이 널 (null) 문자열인지 아닌지 스위치를 테스트합니다. 널 문자열 인 경우 본문이 실행됩니다.


답변

이 방법을 시연하는 것이 좋습니다

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fi

인수가 너무 적은 경우 일반적으로 종료해야합니다.


답변

경우에 따라 사용자가 스크립트에 인수를 전달했는지 여부를 확인해야하며 그렇지 않은 경우 기본값으로 돌아갑니다. 아래 스크립트에서와 같이 :

scale=${2:-1}
emulator @$1 -scale $scale

사용자가 scale두 번째 매개 변수로 전달하지 않은 경우 -scale 1기본적으로 Android 에뮬레이터를 시작 합니다. ${varname:-word}확장 연산자입니다. 다른 확장 연산자도 있습니다.

  • ${varname:=word}값 을 반환하는 대신 undefined 를 설정 합니다 .varnameword
  • ${varname:?message}varname정의되고 null이 아닌 경우 반환 하거나 message스크립트를 인쇄 하고 스크립트를 중단합니다 (예 : 첫 번째 예).
  • ${varname:+word}이 정의되고 null이 아닌 word경우에만 반환 합니다 varname. 그렇지 않으면 null을 반환합니다.

답변

시험:

 #!/bin/bash
 if [ "$#" -eq  "0" ]
   then
     echo "No arguments supplied"
 else
     echo "Hello world"
 fi


답변

인수가 스크립트에 전달되었는지 감지하는 다른 방법 :

((!$#)) && echo No arguments supplied!

(( expr ))식의 원인은의 규칙에 따라 평가하는 쉘 산술 .

인수가 없을 때 종료하려면 다음과 같이 말할 수 있습니다.

((!$#)) && echo No arguments supplied! && exit 1

위의 또 다른 (유사한) 방법은 다음과 같습니다.

let $# || echo No arguments supplied

let $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!

help let 말한다 :

let: let arg [arg ...]

  Evaluate arithmetic expressions.

  ...

  Exit Status:
  If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.

답변

간단한 스크립트에이 스 니펫을 자주 사용합니다.

#!/bin/bash

if [ -z "$1" ]; then
    echo -e "\nPlease call '$0 <argument>' to run this command!\n"
    exit 1
fi


답변

지적해야 할 더 많은 기준이 있기 때문에 단순히 문자열이 null인지 테스트 할 수 있다고 덧붙입니다.

if [ "$1" ]; then
  echo yes
else
  echo no
fi

마찬가지로 arg count를 기대한다면 마지막 테스트를하십시오.

if [ "$3" ]; then
  echo has args correct or not
else
  echo fixme
fi

arg 또는 var와 마찬가지로