Bash if else字符串变量比较

时间:2014-09-16 22:13:30

标签: linux bash

我正在编写一个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

所有教程和在线帮助似乎都有我在这里的内容,但我无法找出我的错误。

2 个答案:

答案 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" ]]

注意:正如所指出的那样,使用[[运算符时,引号是,但是如果你养成了总是引用字符串的习惯,那么你在这两种情况下都是安全的。