我希望我的脚本能够接受一个可选的输入,
目前我的剧本是
#!/bin/bash
somecommand foo
但我想说:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
我希望我的脚本能够接受一个可选的输入,
目前我的剧本是
#!/bin/bash
somecommand foo
但我想说:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
当前回答
您可以使用$#检查参数的数量
#!/bin/bash
if [ $# -ge 1 ]
then
$1
else
foo
fi
其他回答
请不要忘记,如果它是变量$1 ..$ n 您需要写入一个常规变量来使用替换
#!/bin/bash
NOW=$1
echo ${NOW:-$(date +"%Y-%m-%d")}
if [ ! -z $1 ]
then
: # $1 was given
else
: # $1 was not given
fi
您可以使用$#检查参数的数量
#!/bin/bash
if [ $# -ge 1 ]
then
$1
else
foo
fi
你可以使用默认值语法:
somecommand ${1:-foo}
如上所述,Bash参考手册- 3.5.3 Shell参数扩展[强调矿]:
如果parameter未设置或为空,则替换word的展开。否则,参数的值将被替换。
如果你只想在参数未设置的情况下替换一个默认值(但如果它为空,例如,如果它是空字符串则不替换),请使用以下语法:
somecommand ${1-foo}
再次从Bash参考手册- 3.5.3 Shell参数展开:
省略冒号只会对未设置的参数进行测试。换句话说,如果包含冒号,操作符将测试两个参数是否存在,并且其值不为空;如果省略冒号,操作符只测试是否存在。
可以使用变量替换将固定值或命令(如date)替换为参数。到目前为止,答案都集中在固定值上,但这是我用来使date成为可选参数的方法:
~$ sh co.sh
2017-01-05
~$ sh co.sh 2017-01-04
2017-01-04
~$ cat co.sh
DAY=${1:-$(date +%F -d "yesterday")}
echo $DAY