启动 bash 脚本时如何传递参数以便在脚本中执行特定行
例如 (createfile.sh
):
#!/bin/bash
export CLIENT1_DIR="<path1>"
export CLIENT2_DIR="<path2>"
chef-solo -c solo.rb -j client1.json
chef-solo -c solo.rb -j client2.json
然后
$ ./createfile.sh client1
应仅执行client1
特定行,并将其替换为“client2
应仅执行client2
特定行”。
答案1
对此有很多解决方案。这是一个:
#!/bin/bash
client="$1"
case "$client" in
"client1") export CLIENT1_DIR="<path1>" ;;
"client2") export CLIENT2_DIR="<path2>" ;;
*) printf 'Invalid client argument: %s\n' "$client" >&2
exit 1 ;;
esac
chef-solo -c solo.rb -j "$client".json
该client
变量获取第一个命令行参数的值。
该case
语句根据该值设置 或CLIENT1_DIR
(CLIENT2_DIR
或者如果使用了无效值则退出并显示错误消息)。
然后chef-solo
使用与命令行上给出的内容相对应的 JSON 文件进行调用。
答案2
函数中有以下几行:
#!/bin/bash
clientOne(){
## client1 specific lines
echo "one"
}
clientTwo(){
## client2 specific lines
echo "two"
}
case "$1" in
"client1")
clientOne
;;
"client2")
clientTwo
;;
*)
echo "Wrong option" >&2
;;
esac
## Common lines
echo foo