使用默认值将变量传递给bash脚本

时间:2014-12-10 22:10:41

标签: bash shell

我目前有一个bash脚本,其中我对某些变量进行了硬编码,我希望能够通过传递参数来设置这些变量。

一个简单示例:考虑脚本example.sh,其中我有变量data_namesrun_this

的硬编码值
#!/bin/bash

data_names=("apple_picking" "iris")
run_this="TRUE"    

#remainder of script runs things using these hard coded variables

我想知道是否可以编辑此脚本以便:

  1. 我可以在运行data_names

  2. 时通过传递参数来设置run_thisbash example.sh的值
  3. 如果没有为data_namesrun_this传递任何参数到脚本,则变量应采用默认(硬编码)值。

3 个答案:

答案 0 :(得分:2)

如果你想要一些健壮,清晰和健康的东西。优雅,你应该看看getopts来设置run_this

教程:http://wiki.bash-hackers.org/howto/getopts_tutorial示例:http://mywiki.wooledge.org/BashFAQ/035

我想到的是:

./script --run-this=true "apple_picking" "iris"

答案 1 :(得分:0)

您可以使用:

#!/bin/bash

# create a BASH array using passed arguments
data_names=("$@")

# if array is empty assign hard coded values
[[ ${#data_names[@]} -eq 0 ]] && data_names=("apple_picking" "iris")

# print argument array or do something else
printf "%s\n" "${data_names[@]}";

答案 2 :(得分:0)

另一种选择是这样的:

  run_this=${1:-TRUE}
  IFS=',' read -a data_names <<< "${2:-apple_picking,iris}"

假设您的脚本被调用为:

 ./script.sh first_argument array,values,in,second,argument