쉘 코드는 코드를 호출할 때 변수를 변경합니다.

쉘 코드는 코드를 호출할 때 변수를 변경합니다.

쉘 코드를 거의 작성하지 않았지만 코드를 호출할 때 변수를 변경해야 합니다. 이를 수행하는 방법

./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

관련 정보