我想在bash(?:(中执行三元运算,如果变量为null,则提供默认值。
#!/bin/bash
while getopts l:m:ch:eh:cate:op:b flag
do
case "${flag}" in
l) localities=${OPTARG};;
m) mode=${OPTARG};;
ch) cbhost=${OPTARG};;
eh) eshost=${OPTARG};;
cate) category=${OPTARG};;
op) outputDir=${OPTARG};;
b) s3bucket=${OPTARG};;
esac
done
在所有变量中,cbhost和eshost是可选变量。如何在bash中,我可以检查是否为null,然后使用三元运算分配默认值??或者如何为每个变量分配默认值,如果传递参数,则可以覆盖这些值。
提前谢谢。
根据man getopt
Optstring
是已识别的选项字母字符串(请参阅getopt(3((;如果一个字母后面跟着一个冒号,则该选项应该有一个参数,该参数可以用空格分隔,也可以不用空格分隔。
所以有几个问题:
- 不能使用多字母字符串作为选项。必须只有一个字母
- 您似乎期望
-b
选项有一个选项值,但这并没有使用尾随的:
- 您可以在单个for循环中设置每个变量的默认值,如下所示
这里是建议的代码:
#!/bin/bash
# set default value for these variables
declare localities='loc123' mode='m123' category='cat123'
outputDir='op123' s3bucket='s3123' cbhost='https://cbhost:1091/'
while getopts l:m:c:e:y:d:b: flag
do
case "${flag}" in
l) localities=${OPTARG};;
m) mode=${OPTARG};;
c) cbhost=${OPTARG};;
e) eshost=${OPTARG};;
y) category=${OPTARG};;
d) outputDir=${OPTARG};;
b) s3bucket=${OPTARG};;
esac
done
# check values of your variables
declare -p localities mode category outputDir s3bucket cbhost eshost