입력 인수가 있는지 확인해야 합니다. 다음 스크립트가 있습니다.
if [ "$1" -gt "-1" ] then echo hi fi
나는 얻다
[: : integer expression expected
입력 인수1이 존재하는지 확인하기 위해 먼저 어떻게 확인합니까?
질문자 :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 문자열이면 본문이 실행됩니다.
이런식으로 보여주는게 낫다
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}
word
값을 반환하는 대신 정의되지 않은 varname
을 설정합니다.${varname:?message}
정의되어 있고 null이 아닌 경우 varname
반환 message
인쇄하고 스크립트를 중단합니다(첫 번째 예와 같이).${varname:+word}
varname
이 정의되고 null이 아닌 경우에만 word
를 반환합니다. 그렇지 않으면 null을 반환합니다.노력하다:
#!/bin/bash if [ "$#" -eq "0" ] then echo "No arguments supplied" else echo "Hello world" fi
인수가 스크립트에 전달되었는지 감지하는 또 다른 방법:
((!$#)) && 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.
더 많은 기준점이 있기 때문에 간단히 문자열이 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 등
나는 종종 간단한 스크립트에 이 스니펫을 사용합니다.
#!/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 [ $# -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가 int인지 확인하고 싶습니다.
var=$(( var + 0 ))
테스트하기 전에 "[: integer arg required" 오류를 방지하기 위해.
하나의 라이너 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 }
제 경우에는 마지막 인수 가 있는지 확인하는 유일한 솔루션은 다음과 같습니다.
if [[ "$7" == '' ]] ; then echo "error" exit fi
출처 : http:www.stackoverflow.com/questions/6482377/check-existence-of-input-argument-in-a-bash-shell-script
JavaScript는 참조에 의한 전달 또는 값에 의한 전달 언어입니까? (0) | 2022.02.15 |
---|---|
'git reset'을 취소하는 방법은 무엇입니까? (0) | 2022.02.15 |
Java에 임시 필드가 있는 이유는 무엇입니까? (0) | 2022.02.15 |
"git commit" 대신 수행된 "git commit --amend"를 실행 취소하는 방법 (0) | 2022.02.15 |
숨김에 대한 Git diff (0) | 2022.02.15 |