我正在尝试创建一个使用2个命令行参数的简单bash函数。 -v表示详细程度,-d表示日期。
我想使用冗长的false作为默认值,而今天的日期作为-d的默认值。
现在,如果我提供其他实际值,则默认值不会被覆盖。这是示例输出:
$ cruns -v -d 2019-09-10
2019-09-12
false
if check
test false
日期输出应为9月。而不是第12位。
这是我的代码:
编辑:我固定了变量赋值$,但是输出仍然不使用我提供的参数。
cruns(){
local VERBOSE=false
local STARTDATE="$(date +"%Y-%m-%d")"
while getopts "vd:" option; do
case $option
in
v) VERBOSE=true
;;
d) STARTDATE=$OPTARG
;;
esac
done
echo $STARTDATE;
echo $VERBOSE;
echo "if check"
if $VERBOSE; then
echo "test true";# cjobs $STARTDATE | awk -F"_AS-|_Und|_all" '{a[$1]++} END{for(x in a){print x}}'
else
echo "test false";# cjobs $STARTDATE | awk -F"__|_AS-|_Und|_all" '{a[$2]++} END{for(x in a){print x}}'
fi
}
编辑:我固定了变量赋值$,但是输出仍然不使用我提供的参数。 我将函数存储在我的bashrc中,在源bashrc中,如果重要的话,可以从终端调用该函数。
在getopts情况下,我需要更改什么以使变量被提供的命令行参数填充?
答案 0 :(得分:2)
分配给变量名,而不是它的值。
因此是VERBOSE=true
和STARTDATE=$OPTARG
。
case $option
in
v) VERBOSE=true
;;
d) STARTDATE=$OPTARG
;;
esac
另外,由于您似乎正在使用Shell中的crun命令,因此需要将包含source
定义的文件cruns
放入当前shell中。
source cruns.sh