麻烦在bash脚本中设置变量

时间:2014-02-25 20:49:36

标签: bash

我遇到一个非常简单的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

我做错了什么?

3 个答案:

答案 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。