저는 다양한 목적으로 쉘 스크립트를 작성하고 있습니다. 다양한 작업은 입력 매개변수에 따라 달라집니다. 쉘 스크립트를 실행할 때 어떤 매개변수가 전달되는지 확인하는 방법은 무엇입니까?
누군가 이 쿼리가 어떻게 작동하는지 설명해 줄 수 있나요? 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+}
대체하는 쉘의 내장 함수 입니다. 교체 실패가 설정되지 않으면 조건이 평가되고 루프 가 중단됩니다.:true
while
$1
false
while
while
루프가 반복될 때마다 성공하면 _fn() echo
es의 $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().