etc./StackOverFlow

Bash 셸 스크립트에서 입력 인수의 존재 확인

청렴결백한 만능 재주꾼 2022. 2. 15. 08:49
반응형

질문자 :user775187


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

 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 문자열이면 본문이 실행됩니다.


phoxis

이런식으로 보여주는게 낫다

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

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


Val

어떤 경우에는 사용자가 스크립트에 인수를 전달했는지 확인하고 그렇지 않은 경우 기본값으로 폴백해야 합니다. 아래 스크립트에서처럼:

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

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

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

Aleks N.

노력하다:

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

Ranjithkumar T

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

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

(( expr )) 은 표현식이 Shell Arithmetic 의 규칙에 따라 평가되도록 합니다.

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

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

devnull

더 많은 기준점이 있기 때문에 간단히 문자열이 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 등


seorphates

나는 종종 간단한 스크립트에 이 스니펫을 사용합니다.

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

f2cx

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

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

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

Brad Parks

작은 알림으로 Bash의 숫자 테스트 연산자는 정수( -eq , -lt , -ge 등)에서만 작동합니다.

내 $vars가 int인지 확인하고 싶습니다.

 var=$(( var + 0 ))

테스트하기 전에 "[: integer arg required" 오류를 방지하기 위해.


Cwissy

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

 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 및 실패 시 스크립트를 중단하는 die 함수를 반환합니다.

 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 }

AndrewD

제 경우에는 마지막 인수 가 있는지 확인하는 유일한 솔루션은 다음과 같습니다.

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

r1si

출처 : http:www.stackoverflow.com/questions/6482377/check-existence-of-input-argument-in-a-bash-shell-script

반응형