所以我试图编写一个简单的脚本,它接受两个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
答案 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
之间