今天同事开发一个用户登录的程序,(起初我只以为是判断问题),开发过程中遇到一个问题是判断名字和密码是否正确。
简化脚本如下:
#!/bin/bash
if [ $1=="TOM" && $2 -eq 123 ];then
echo "true"
else
echo "false"
fi
报错信息如下:
line 3: [: missing `]'
false
首先就是等号的问题,两边竟然没有留空格
而且双等号是算术运算符,虽然也可以用来做字符比较,但用单等号更合适
然后作为用户登录判断,就算是密码,一般也应该不是纯数字的,安全级别太低了
-eq 关系运算符,关系运算符只支持数字,不支持字符串运算,除非字符串只有数字
我先让他用一个条件写对,修改后代码如下
#!/bin/bash
if [ $1 = "TOM" ];then
echo "true"
else
echo "false"
fi
exit 0
结果正确。
最终修改结果如下,"=" 等号为字符串运算符,判断两个字符串是否相等就应该用字符串运算符
(应该注意,既然是用户登录程序,密码也可以有字母的)
#!/bin/bash
if [ $1 = "TOM" -a $2 = "123" ];then
#if [ $1 = "TOM" ] && [ $2 = "123" ];then #这两种写法都可以,要区别 -a 与 && 的用法。
echo "true"
else
echo "false"
fi
exit 0
以上两种判断都可以,要区别 -a 与 && 的用法
如果写成 if [ $1 = "123" && $2 = "123" ]
就会报错 line 3: [: missing `]'
附言: if 条件判断的时候,要多注意几种运算符的使用,特别是新手,注意细节,熟悉逻辑运算符,布尔运算符等的区别,使用时的不同
如有些许帮助,请点个赞给我些加油!
^-^