我遇到一个非常简单的bash脚本(test.sh)的问题:
if [ $# >=1 ]
then
backup_file=$1
else
backup_file=~/standard.tar.bz2
fi
echo $backup_file
如果我通过论证:
test.sh myfile
我得到了预期的输出:myfile
否则,我没有输出。我期待看到(当test.sh执行时没有参数):~/standard.tar.bz2
我做错了什么?
答案 0 :(得分:4)
此条件评估是问题所在:
[ $# >=1 ]
将其更改为:
[ $# -ge 1 ]
或者在BASH中:
[[ $# -ge 1 ]]
OR:
(( $# ))
[...]
且[[...]]
不允许>=
作为运营商答案 1 :(得分:3)
如果您正在使用数学运算符,请在正确的上下文中使用它。而不是说:
if [ $# >=1 ]
说
if (( $# >=1 ))
(而且你不必担心经营者周围的空间,或者缺乏空间。)
答案 2 :(得分:3)
其他人已经解决了直接的语法问题,但写一个完全不同的方法是利用parameter expansion to use a default value:
backup_file="${1:-$HOME/standard.tar.bz2}"
当且仅当它存在时,这将用$1
中的值替换backup_file。