if的[]和[[]]

[]是bash里test的同义词,比如[ -d filename ]和test -d filename的结果是一样的,逻辑测试使用-a、-o
[[]]比[]通用,逻辑测试使用&&、||

#!/bin/bash
x=$1
if [ -d $x ];then
        echo ok
else
        echo "not equel"
fi
----------------------------
[root@localhost shelltest]# test -d /root && echo ll
ll

在[]里面,使用-eq的时候,需要用整数来做参数,如果是非整数就会提示报错,而[[]]则直接把非整数的字符串转成了0(),而不会去检查并显示报错内容。

if [ $x -eq $y ]时
[root@localhost shelltest]# ./teststring.sh 1 ad
./teststring.sh: line 4: [: ad: integer expression expected
当if [[ $x -eq $y ]]时
[root@localhost shelltest]# ./teststring.sh ad ad
ok
[root@localhost shelltest]# ./teststring.sh 1 a
not equel
[root@localhost shelltest]# ./teststring.sh aa 0
ok
[root@localhost shelltest]# ./teststring.sh 0 aa
ok

[]和[[]]都不支持+-*/数学运算符

整数的比较
注意前面都是有个符号-

eq等于
ne不等于
gt大于
ge大于等于
lt小于
le小于等于
例
if [ $x -eq $y ]
if [[ $x -gt $y ]]
if [ "$x" -eq "$y" ]
if [[ "$x" -eq "$y" ]]
>大于
>=大于等于
<小于
<=小于等于
例
if [[ $x > $y ]]
if (( $x > $y ))
注:if [ $x > $y ]会一直为true,可以改成if [ $x \> $y ],也就是把符号>转义(包括字符串(**ASCII中对应的顺序大小**)和整数)。(if [ "$x" \> "$y" ])

字符串的比较
=等于,效果和==是一样的

if [ $x = $y ]
if [[ $x = $y ]]
if [ $x == $y ]
if [[ $x == $y ]]
if [[ $x = "abc" ]]

-z测试是否为空,为空则为true

if [ -z "$x" ]
if [ -z $x ]

-n测试是否不为空,不为空则为true

if [ -n "$x" ]

注:需要有双引号,负责一直为true

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值