我写了很少的 shell 代码,但我需要在调用代码时更改变量如何做到这一点
例子
./shell.sh --varaible="New Value"
应该输出
New Value,Some Value
外壳程序
variable="Old Value"
variable2="Some Value"
echo "$variable,$variable2"
答案1
如果脚本显式设置变量的值,则无法从命令行更改脚本中变量的值。
但是,您可以以考虑命令行参数的方式设置变量的值。
命令行中给出的参数将可供 shell 脚本使用位置参数 $1
,$2
,$3
ETC。
要将变量设置为第一个位置参数,您可以使用
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