使用if-elif-else语句在Unix Shell脚本中进行不明确的重定向

时间:2016-02-04 05:25:27

标签: bash shell unix if-statement logic

我刚刚开始在Unix中编写if-else语句。这是我最近写的一个简短的Bash脚本。我不断收到一个模糊的重定向错误,但我无法解决问题。

执行时,我收到以下错误消息:

stringComp: line 17: $str2: ambiguous redirect
stringComp: line 20: $str2: ambiguous redirect
stringComp: line 23: [: too many arguments

这是脚本:

str1="I like turtles"
str2="I want to be Iron Man"

if [ $str1 > $str2 ]
then
        echo "The first string is longer than the second"
elif [ $str1 < $str2 ]
then
        echo "The second string is longer than the first"
elif [ $str1 = $str2 ]
then
        echo "Both strings are of equal length"
else
        echo "Invalid argument"
fi

关于该怎么做的任何建议?感谢。

1 个答案:

答案 0 :(得分:1)

$str1 > $str2不是比较字符串长度,>实际上是与[一起使用的重定向运算符,${#str1}是Unix系统中的一个独立程序。

您可以使用str1="I like turtles" str2="I want to be Iron Man" if [[ ${#str1} -gt ${#str2} ]] then echo "The first string is longer than the second" elif [[ ${#str1} -lt ${#str2} ]] then echo "The second string is longer than the first" elif [[ ${#str1} -eq ${#str2} ]] then echo "Both strings are of equal length" else echo "Invalid argument" fi 来获取字符串长度:

[[...]]

最好在bash中使用serializer.is_valid()