쉘 코드를 거의 작성하지 않았지만 코드를 호출할 때 변수를 변경해야 합니다. 이를 수행하는 방법
예
./shell.sh --varaible="New Value"
출력해야 한다
New Value,Some Value
껍데기
variable="Old Value"
variable2="Some Value"
echo "$variable,$variable2"
답변1
스크립트가 변수 값을 명시적으로 설정하는 경우 명령줄에서 스크립트의 변수 값을 변경할 수 없습니다.
그러나 명령줄 인수를 고려하는 방식으로 변수 값을 설정할 수 있습니다.
명령줄에 제공된 인수는 쉘 스크립트에서 사용할 수 있습니다.위치 매개변수 $1
, $2
, $3
등.
변수를 첫 번째 위치 인수로 설정하려면 다음을 사용할 수 있습니다.
variable="$1"
따라서 스크립트는 다음과 같을 수 있습니다.
#!/bin/sh
variable="$1"
variable2="Some Value"
echo "$variable,$variable2" # or printf '%s,%s\n' "$variable" "$variable2"
...그리고 호출될 것입니다
$ ./script.sh "New Value"
출력은 다음과 같습니다
New Value,Some Value
제공하다기본변수 값의 경우 다음을 수행할 수 있습니다.
variable="${1:-Old Value}"
위 스크립트에서 이를 사용하면 Old Value,Some Value
스크립트가 명령줄 인수 없이 호출되었는지 여부가 출력에 표시됩니다.
다음 짧은 스크립트는 세 개의 명령줄 플래그 -a
및 에 대해 -b
올바른 명령줄 구문 분석을 수행합니다 -c
. 매개변수를 플래그 지정 -a
하고 -b
허용하지만 -c
매개변수는 허용하지 않습니다. 이는 명령줄 플래그를 사용하여 기본값을 재정의할 수 있는 세 가지 변수, var_a
및 를 var_b
사용 합니다.var_c
마지막으로 스크립트는 이러한 변수의 값을 표시하고 명령줄에 제공될 수 있는 다른 모든 항목도 표시합니다.
#!/bin/sh
var_a=12
var_b="yellow"
var_c=0
while getopts 'a:b:c' opt; do
case "$opt" in
a) var_a=$OPTARG ;;
b) var_b=$OPTARG ;;
c) var_c=1 ;;
*) echo 'command line parsing error' >&2
exit 1
esac
done
shift $(( OPTIND - 1 ))
printf 'var_a = %s\nvar_b = %s\nvar_c = %s\n' \
"$var_a" "$var_b" "$var_c"
if [ "$#" -gt 0 ]; then
echo 'Other operands:'
printf '%s\n' "$@"
fi
몇 번 실행해 보세요:
$ ./script.sh
var_a = 12
var_b = yellow
var_c = 0
$ ./script.sh -b "green tea" "hello world"
var_a = 12
var_b = green tea
var_c = 0
Other operands:
hello world
$ ./script.sh -c my other car is a cdr
var_a = 12
var_b = yellow
var_c = 1
Other operands:
my
other
car
is
a
cdr
$ ./script.sh -a -d
var_a = -d
var_b = yellow
var_c = 0
$ ./script.sh -a
./script.sh[15]: -`a' requires argument
command line parsing error
$ ./script.sh -a "boo!" "help!" -c
var_a = boo!
var_b = yellow
var_c = 0
Other operands:
help!
-c