如何知道参数是否传递给我的bash脚本?

时间:2014-10-21 13:02:19

标签: linux bash command-line-arguments

假设我有一个bash脚本scr.sh。在这个脚本里面我有一个变量$x。我需要设置以下行为。如果使用参数调用scr.sh,如:

./scr.sh 45

然后我希望在我的bash脚本中将x分配给此值。否则,如果没有命令行参数,如:

./scr.sh

x应该分配一些默认值,在我的例子中是一个环境变量,比如x=$ENVIRONMENT_VAR

我该怎么做?

2 个答案:

答案 0 :(得分:4)

您可以使用它来设置默认值:

x="${1:-$ENVIRONMENT_VAR}"

${parameter:-word}
   Use Default Values. If parameter is unset or null, the expansion of word is
   substituted. Otherwise, the value of parameter is substituted.

答案 1 :(得分:0)

虽然@Cyrus已经很好地回答了这个问题,但我想提供${parameter:-word}方法的略微变化,即:

: ${x:=${1-$ENVIRONMENT_VAR}}

这使您可以更进一步,并在调用脚本时提交覆盖功能。下面你会看到使用这种方法可以拥有的三个不变量:

$ ./src.sh
x=42
$ ./src.sh 8
x=8
$ x=2 ./src.sh 8
x=2

用于上述输出的脚本:

$ cat ./src.sh
#!/usr/bin/env bash

ENVIRONMENT_VAR=42
: ${x:=${1-$ENVIRONMENT_VAR}}
echo "x=${x}"