Linux if 条件判断 [: missing `]' && -a 的使用

今天同事开发一个用户登录的程序,(起初我只以为是判断问题),开发过程中遇到一个问题是判断名字和密码是否正确。

简化脚本如下:

#!/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 条件判断的时候,要多注意几种运算符的使用,特别是新手,注意细节,熟悉逻辑运算符,布尔运算符等的区别,使用时的不同


如有些许帮助,请点个赞给我些加油!

^-^

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值