String 使用if-else比较2个字符串的Shell脚本

String 使用if-else比较2个字符串的Shell脚本,string,shell,if-statement,String,Shell,If Statement,我使用shell脚本比较两个字符串变量是否为空。并根据哪些变量为空运行一些操作 a="" b="" read a read b if [ -z $a ] && [ -n $b ] ;then echo "Var a is blank" elif [ -n $a ] && [ -z $b ] ;then echo "Var b is blank" elif [ -n $a ] && [ -n $b ] ; then ech

我使用shell脚本比较两个字符串变量是否为空。并根据哪些变量为空运行一些操作

a=""
b=""

read a
read b

if [ -z $a ] && [ -n $b ] ;then
    echo "Var a is blank"
elif [ -n $a ] && [ -z $b ] ;then
    echo "Var b is blank"
elif [ -n $a ] && [ -n $b ] ; then
    echo "Both fields not empty"
else
    echo "Both fields are blank"
fi

如果我的字符串变量有空格,我收到if else语句的二进制运算符预期错误。我做错了什么?请帮助。

您有语法错误。您可以使用以下选项:

if [[ -z "$a" && -n "$b" ]]; then
    echo "a is empty"
elif [[ -n "$a" && -z "$b" ]]; then
    echo "b is empty"
elif  [[ -z "$a" && -z "$b" ]]; then
    echo "both are empty"
else
    echo "both are non-empty"
fi

始终双引号引用变量,如下所示:

if [ -z "$a" ] && [ -n "$b" ] ;then
...

这将保护字符串中的所有空格。

如果您使用的是BASH,那么我建议您最好开始使用
[[和]]]
,以获得更简单的语法和更多的功能。