我正在编写一个shell脚本,我试图比较两个字符串变量。一切正常,因为所有变量都有来自命令的值,但是if if else语句不起作用。
#!/bin/bash
name=$1
for i in {1...10}
do
username=sudo cat /class/rolls/CSCE215-*|awk 'BEGIN {FIELDWIDTHS = "32 20"} {print $2}'|cut -d " " -f6 |sed -n '1,1p'
if ["$name" == "$username"]
then
echo Correct Username
else
echo Incorrect Username
fi
done
所有教程和在线帮助似乎都有我在这里的内容,但我无法找出我的错误。
答案 0 :(得分:1)
您正在使用"经典测试"但总是使用较新的条件表达式是个好主意:http://wiki.bash-hackers.org/syntax/ccmd/conditional_expression
if [[ "$name" == "$username" ]]
据我所知,测试命令(带一个支架)甚至不能正式支持" =="操作者..
哦,当然不要忘记括号内的空格,bash需要它们将这些行分成单词。
答案 1 :(得分:1)
使用test
或[
时,正确的比较是:
test "$string1" = "string2"
或
[ "$sting1" = "$string2" ]
注意:单个=
代替==
,始终引用sting变量。此外,使用test
或[
运算符时没有错误,实际上,当需要可移植性时,它们是首选。它们只是缺少[[
运算符的某些扩展功能,例如字符类比较以及使用=~
的功能。
现在使用[[
运算符时,正确的格式为:
[[ "$sting1" == "$string2" ]]
注意:正如所指出的那样,使用[[
运算符时,引号是不,但是如果你养成了总是引用字符串的习惯,那么你在这两种情况下都是安全的。