我想了解以下代码:
if [ -z "$1" ] || [ -z "$2" || [ "${3:-}" ]
then
echo "Usage: $0 <username> <password>" >&2
exit 1
fi
我想了解代码中-z "$1"
和"${3:-}"
的含义。
另请帮助我理解代码中的>&2
。
答案 0 :(得分:3)
1)您的代码不正确,您错过了某个]
括号。可能在[ -z "$2"
阻止之后。
2)if
语句执行以下命令,然后执行then .. fi
或then .. 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
,