Bash脚本:在IF语句中使用两个变量

时间:2016-05-20 23:22:17

标签: bash if-statement scripting

所以我试图编写一个简单的脚本,它接受两个stdin变量然后测试以查看这两个变量的字符串值是否等于set字符串。这是我的代码:

echo "First Name:"
read fN

echo "Last Name"
read lN

if ((  $fN + $lN=="louis smith" ))
then
    echo "You are root, you may continue."
else
    echo "Access denied, you are not root."
first

当我运行脚本并输入名字" louis"姓氏为"史密斯"我收到这个错误:

  

((:louis + smith == louis smith:表达式中的语法错误(错误标记为"史密斯")

然后它告诉我,当我清楚的时候,我不是根。的xD 任何输入都有帮助:D

2 个答案:

答案 0 :(得分:2)

(( ... ))用于算术表达式,您不能用它来比较字符串。 +用于添加数字,而不是连接字符串。使用[[ ... ]]作为条件表达式。

if [[ "$fN $lN" = "louis smith" ]]

答案 1 :(得分:0)

除了其他答案之外,您还需要确保熟悉条件正确编写的每种方法。没有魔法,只需阅读 man bash 的相应部分。 [[测试实际上是bash中的保留字并且是 bashism (它在bash中工作,但在POSIX shell中不起作用)。它是bash最灵活和最宽容的测试结构,如果可移植性是一个问题,应该使用它。确保您了解[[测试子句与{{之间引用要求分词路径名扩展之间的区别1}}和[内置。

除了test之外,您还可以使用[[[进行测试。 (test[相同)。以下对POSIX shell也是正确且可移植的:

test

要直接回答原始问题,请使用if [ "$fN $lN" = "louis smith" ] if test "$fN $lN" = "louis smith" )或-a或)在测试表达式本身(较旧的语法)中或将多个测试表达式-o)或{{分开1}}()。例如,使用您的示例检查多个条件,您可以这样做:

&&

||

使用if [ "$fN" = "louis" -a "$LN" = "smith" ] if test "$fN" = "louis" -a "$LN" = "smith" 撰写:

&&

||

注意>无论您使用哪种必须始终测试表达式和{{之间留下if [ "$fN" = "louis" ] && [ "$LN" = "smith" ] 1}}和if test "$fN" = "louis" && test "$LN" = "smith" 以及space[(或换行符指示符]space之间