这个shell脚本做什么?

这个shell脚本做什么?,shell,scripting,Shell,Scripting,我不确定这些“-z”和“-n”在这里做什么?-z用于测试字符串是否为空 -n正好相反。将为您解释任何一行shell[-z$INV\u NAME]或[-n$PRO\u NAME]可以在那里使用。顺便说一句,使用true和false字符串作为条件是非常糟糕的做法。这样做的代码通常也会执行类似以下操作:if$FROM_PROJECT;然后…,从而执行半任意代码执行(如果可以为变量的内容指定任意值,则添加安全性检查需要检查的内容)。相反,使用空/非空状态来进行布尔确定。(也可以很容易地使用0和1作为布尔

我不确定这些“-z”和“-n”在这里做什么?

-z
用于测试字符串是否为空


-n
正好相反。

将为您解释任何一行shell<代码>[-z$INV\u NAME]或
[-n$PRO\u NAME]
可以在那里使用。顺便说一句,使用
true
false
字符串作为条件是非常糟糕的做法。这样做的代码通常也会执行类似以下操作:if$FROM_PROJECT;然后…,从而执行半任意代码执行(如果可以为变量的内容指定任意值,则添加安全性检查需要检查的内容)。相反,使用空/非空状态来进行布尔确定。(也可以很容易地使用
0
1
作为布尔值;
if((some_值))
将是真实的,如果
some_值
持有正整数值,或者变量名称本身持有正整数值)。@CharlesDuffy-仅供参考,在
[[-z$INV_NAME]]
解析错误!意外的标记'-z'(位置3)”注释中也会出现barfs
FROM_PROJECT=false
if [[ -z $INV_NAME ]]; then
    if [[ -z $PRO_NAME ]]; then
            echo "error: variable not set" >&2
            exit 1
    elif [[ -z $INV_FILE ]]; then
            echo "error: variable INV not set" >&2
            exit 1
    fi
    FROM_PRO=true
elif [[ -n $PRO_NAME ]] || [[ -n $INV_FILE ]]; then
    echo "error: variable INV_NAME is not compatible with PRO_NAME and             INVENTORY_FILE" >&2
    exit 1