source

Bash 셸 스크립트에 입력 인수가 있는지 확인합니다.

ittop 2023. 5. 22. 21:39
반응형

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 문자열입니다.됩니다.null 문자경본실행됩니다이문우.

이 방법으로 시연하는 것이 좋습니다.

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

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

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

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

사용자가 합격하지 못한 경우 여기에 표시scale두 번째 매개 변수로 안드로이드 에뮬레이터를 출시합니다.-scale 1결석으로 ${varname:-word}확장 연산자입니다.다른 확장 연산자도 있습니다.

  • ${varname:=word}그것은 정의되지 않은 을 설정합니다.varname하는 대신에word값;값;값
  • ${varname:?message}아 하 나 돌 오 가varname null이 null을 합니다.message스크립트를 중단합니다(첫 번째 예제처럼).
  • ${varname:+word}어느 쪽이 돌아옵니까?word경우에 한하여varname정의되었으며 null이 아닙니다. 그렇지 않으면 null을 반환합니다.

시도:

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

더 많은 기준점이 있기 때문에 단순히 문자열이 null인지 테스트할 수 있다는 점만 추가하겠습니다.

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

마찬가지로 arg 카운트가 예상되는 경우 마지막을 테스트하십시오.

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

기타 모든 Arg 또는 var와 함께.

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

((!$#)) && 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

좀 더 현대적인

#!/usr/bin/env bash

if [[ $# -gt 0 ]]
  then echo Arguments were provided.
  else echo No arguments were provided.
fi

인수가 존재하는지 확인하려면 인수 개수가 목표 인수 번호보다 크거나 같은지 확인할 수 있습니다.

다음 스크립트는 이 기능이 어떻게 작동하는지 보여줍니다.

test.sh

#!/usr/bin/env bash

if [ $# -ge 3 ]
then
  echo script has at least 3 arguments
fi

다음과 같은 출력을 생성합니다.

$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 arguments

작數, Bash의 숫테연트산정는대다작수니동합해만서로에참고자)에서만 작동합니다.-eq,-lt,-ge아래)

나는 내 $vars가 ints인지 확인하고 싶습니다.

var=$(( var + 0 ))

테스트하기 전에 "[: integer arg required]" 오류를 방지하기 위한 것입니다.

하나의 라이너 배시 함수 유효성 검사

myFunction() {

    : ${1?"forgot to supply an argument"}
    if [ "$1" -gt "-1" ]; then
        echo hi
    fi

}

함수 이름 및 사용법 추가

myFunction() {

    : ${1?"forgot to supply an argument ${FUNCNAME[0]}() Usage:  ${FUNCNAME[0]} some_integer"}
    if [ "$1" -gt "-1" ]; then
        echo hi
    fi

}

정수인지 확인하기 위한 유효성 검사 추가

전달된 인수가 정수인지 확인하는 등의 추가 유효성 검사를 추가하려면 유효성 검사 함수를 호출하도록 유효성 검사를 하나의 라이너로 수정합니다.

: ${1?"forgot to supply an argument ${FUNCNAME[0]}() Usage:  ${FUNCNAME[0]} some_integer"} && validateIntegers $1 || die "Must supply an integer!"

그런 다음 인수를 검증하는 검증 함수를 구성하여 성공 시 0을 반환하고 실패 시 1을 반환하며 실패 시 스크립트를 중단하는 다이 함수를 생성합니다.

validateIntegers() {

    if ! [[ "$1" =~ ^[0-9]+$ ]]; then
        return 1 # failure
    fi
    return 0 #success

}

die() { echo "$*" 1>&2 ; exit 1; }

훨씬 더 간단함 - 사용하기만 하면 됩니다.set -u

set -u참조된 모든 변수가 사용될 때 설정되었는지 확인합니다. 따라서 설정만 하고 잊어버립니다.

myFunction() {
    set -u
    if [ "$1" -gt "-1" ]; then
        echo hi
    fi

}

(7개의 인수가 있는) 경우 마지막 인수가 존재하는지 확인하는 것이 유일한 해결책입니다.

if [[ "$7" == '' ]] ; then
  echo "error"
  exit
fi

언급URL : https://stackoverflow.com/questions/6482377/check-existence-of-input-argument-in-a-bash-shell-script

반응형