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
'source' 카테고리의 다른 글
업데이트를 사용하여 여러 필드를 어떻게 업데이트합니까?공식 c# 드라이버를 사용하여 MongoDB에서 설정합니까? (0) | 2023.05.22 |
---|---|
IHTTPHandler의 용도는 무엇입니까?재사용 가능합니까? (0) | 2023.05.22 |
Xcode 'Build and Archive' 메뉴 항목 사용 안 함 (0) | 2023.05.22 |
모든 것이 같은 폭을 갖도록 bash에서 정수 시퀀스를 제로 패드하는 방법은 무엇입니까? (0) | 2023.05.22 |
SQL Azure 프로파일링 (0) | 2023.05.22 |