쉘 스크립트 실행을 위한 입력 매개변수를 확인하는 방법

쉘 스크립트 실행을 위한 입력 매개변수를 확인하는 방법

저는 다양한 목적으로 쉘 스크립트를 작성하고 있습니다. 다양한 작업은 입력 매개변수에 따라 달라집니다. 쉘 스크립트를 실행할 때 어떤 매개변수가 전달되는지 확인하는 방법은 무엇입니까?

누군가 이 쿼리가 어떻게 작동하는지 설명해 줄 수 있나요? 1개의 입력 매개변수를 사용하는 1개의 셸 스크립트가 있고 abc.sh그 값에 따라 셸 스크립트가 작업을 수행하거나 수행하지 않아야 한다고 가정합니다. 입력 매개변수로 "1"을 전달하고 실행을 예약했다고 가정해 보겠습니다. 쉘 스크립트가 실행될 때 매개변수 값을 어떻게 테스트합니까?

답변1

_fn() { set -- "$@" $(cat)
    while ${1+:} false ; do 
        echo "$1" && [ "$1" = "arg2" ] && echo "$1"
        $YOUR_CHK
        shift
    done
}

echo "arg2" | _fn "arg1"

산출

arg1
arg2
arg2

cmd 라인 매개변수를 처리할 수 있으며 매개변수 배열에 하나 이상의 매개변수가 저장되어 있는지 확인하기 위해 루프 stdin만 실행합니다. while검사하는 모든 매개변수를 삭제하므로 $YOUR_CHK가치 있는 정보를 어떻게든 저장하는 것이 그 일부여야 합니다.

_fn내용이 스크립트 본문이거나 셸 함수 형식인 경우 동작은 동일합니다.

_fn처리 stdin- 이 경우 첫 번째 줄의 - 또는 -는 위치 인수 쉘 배열을 명령줄에 전달된 값으로 설정하여 "arg2" echo재정의 |pipe되고 모든 것이 뱉어집니다.set$@"$@"cat$(command substitution)

while _fn's $1첫 번째 매개변수는 루프 조건을 만족시키기 위해 ${set+}대체하는 쉘의 내장 함수 입니다. 교체 실패가 설정되지 않으면 조건이 평가되고 루프 가 중단됩니다.:truewhile$1falsewhile

while루프가 반복될 때마다 성공하면 _fn() echoes의 $1첫 번째 매개변수 는 다음과 같습니다 &&.echo언제나성공) 문자열과 같은지 [ tests ]확인하고 es가 다시 성공하면 확인합니다.$1"arg2" &&[ test ]_fn() echo$1

$YOUR_CHK작동하지 않습니다. 셸이 코드를 실행하기 전에 null로 평가되는 설정되지 않은 변수입니다.

루프가 반복될 때마다 첫 번째 인수를 while제거 shift합니다 . $1따라서 반복 1에서는 다음 "$@"과 같습니다.

arg1 arg2

하지만 shift처음 이후에는 다음과 같습니다.

arg2

마지막 시간 이후에는 shift다음과 같았습니다.

${1+:} false이제 다시 설정되지 않았기 때문에 $1쉘은 교체되지 않고 평가 :true만 수행되므로 루프가 false중단 되고 종료 됩니다.while_fn().

관련 정보