什么是b中的-z

时间:2017-05-12 21:15:08

标签: linux bash shell

我想了解以下代码:

if [ -z "$1" ] || [ -z "$2" || [ "${3:-}" ]
then
  echo "Usage: $0 <username> <password>" >&2
  exit 1
fi

我想了解代码中-z "$1""${3:-}"的含义。 另请帮助我理解代码中的>&2

2 个答案:

答案 0 :(得分:3)

1)您的代码不正确,您错过了某个]括号。可能在[ -z "$2"阻止之后。

2)if语句执行以下命令,然后执行then .. fithen .. else关键字中包含的代码块,如果命令的返回值为{{ 1}}(他们的退出代码是0)

3)true只是[命令的别名(try test)。此命令采用多个参数并对其进行评估。例如,如果man test未设置或为空字符串,则与-z "$something"标志一起使用将返回true(0)。试试吧:

$something

4)if [ -z "$variable" ]; then echo Variable is not set or is an empty string fi 语句是||。如果前一个命令返回OR语句,则执行下一个命令。所以在声明中

false
仅当if [ -z "$variable" ] || [ -z "$variable2" ]; then echo Variable 1 or variable 2 is not set or is an empty string fi 为空时才会执行

命令[ -z "$variable2" ]。使用不同的语法可以实现相同的目的:

variable

应该更快,因为它只需要运行if [ -z "$variable" -o -z "$variable2" ]; then echo Variable 1 or variable 2 is not set or is an empty string fi 程序的一个实例。标记test表示-o,因此您可以将其读作: 如果未设置OR /空或未设置variable / EMPTY ...

5)语句variable2表示如果设置了"[ ${3:-} ]"(脚本的第三个参数),则返回true

6)$3是流重定向。每个过程都有两个输出:标准输出和错误输出。这些是独立的,可以重定向(例如)以写入两个不同的文件。 >&2表示&#34;将标准输出重定向到与标准错误相同的位置&#34;。

总而言之:如果脚本运行>&2为空或then .. fi为空或$1非空,则执行$2之间的命令。这意味着脚本应该使用两个参数运行。如果没有,$3消息将打印到标准错误输出。

答案 1 :(得分:2)

-z STRING表示the length of STRING is zero

${parameter:-word}如果参数未设置或为null,则替换word的扩展。在你的情况下,如果$ 3没有任何值,$ 3只是设置一个空值。

&2写入标准错误。我的意思是执行命令的stdout值被发送到stderr