linux 比较运算符

 网络上能找到的相关资料太多了,也太繁杂,但有些人还整理得不错,下面根据自己的偏好再梳理一下,有些是自己对照着man手册翻译的,下面的例子都是自己编造自己测试OK,都是比较实用的东西,方便自己日后参考。

1、算术运算比较运算符(bash自身不能比较浮点数)

-eq 等于          [ $num1 -eq $num2 ]
-ne 不等于       [ 100   -ne $num1 ]
-lt 小于          [ 100   -lt `expr $num1 + $num2` ]
-le 小于或等于   [ 100   -le `expr $num1 \* $num2` ]
-gt 大于          [ 100   -gt `expr $num1 / $num2` ]
-ge 大于或等于   [ 100   -ge `expr $num1 % $num2` ]

2、字符串比较运算符   

-z string  如果 string 长度为零,则为真 [ -z "`ps aux | grep mysql`" ]
-n string  如果 string 长度非零,则为真  [ -n "$string" ]
              【注意】 $string 一定要放在双引号里面 "$string",否则使用 -n -z 的结果都为真!
string1 != string2  如果 string1 与 string2 不同,则为真  [ "$str1" != "Snail" ]
string1 == string2  如果 string1 与 string2 相同,则为真 [ "$str1" == "$str2" ]
                    (上面用一个 = 也可以,在严格的 POSIX 兼容下使用)
string1  string2   如果 string1 按字典顺序比较大于 string2,则为真

3、文件比较运算符  

-a filename  如果 filename 存在,则为真                   [ -e $HOME/.bashrc ]
-e filename  (同上)
-b filename  如果 filename 存在,并且是块文件,则为真    [ -e /dev/loop0 ]
-c filename  如果 filename 存在,并且是字符文件,则为真   [ -e /dev/ttyS0 ]
-d filename  如果 filename 存在,并且为目录,则为真       [ -d /home/snail ]
-f filename  如果 filename 存在,并且为常规文件,则为真   [ -f /dev/ttyS0 ]
-g filename  如果 filename 存在,并且为set-group-id,为真 [ -f $HOME/ak47 ]
-h filename  如果 filename 存在,并且为符号连接,则为真   [ -h /bin/vi ]
-L filename  (同上)
-k filename  如果 filename 存在,并且设置了sticky位,为真 [ -k /bin/ping ]
-p filename  如果 filename 存在,并且为有名管道(FIFO),真 [ -p /tmp/pipe ]
-r filename  如果 filename 存在,并且可读,则为真         [ -r /etc/passwd ]
-s filename  如果 filename 存在,并且大小不为零,为真    [ -s ./none-zero ]
-u filename  如果 filename 存在,并且为set-user-id,为真  [ -f $HOME/ak47 ]       
-w filename  如果 filename 存在,并且可写,则为真         [ -w /var/log/mail ]
-x filename  如果 filename 存在,并且可执行,则为真       [ -x ./start.sh ]

下面这些不常用的:

-t fd        如果文件描述符被打开并指向一个终端,则为真   [ -t /proc/1/fd/10 ]
              【提示】在 /proc/进程号/fd 下可以找到文件描述符:)
-O filename  如果 filename 存在,并且被有效用户ID所拥有,则为真
-G filename  如果 filename 存在,并且被有效组ID所拥有,则为真
-S filename  如果 filename 存在,并且为一个socket,则为真 [ -S /tmp/mysql.sock ]
-N filename  如果 filename 存在,并且在上次读取后被修改过,则为真
-o optname   如果 shell 选项 optname 被开启,则为真
              【提示】使用 set -o 来查看
file1 -nt file2  如果 file1 比 file2 新,或者 file1 存在 file2 不存在,则为真
file1 -ot file2  如果 file1 比 file2 旧,或者 file2 存在 file1 不存在,则为真
file1 -ef file2  如果 file1 和 file2 都指向同样的设备(device)和索引节点号(inode numbers),则为真
              【提示】查看文件的索引节点可以用 ls -i 选项
Linux 条件运算符常用于脚本编程(如 Bash 脚本)中进行条件判断,以下是几种常见的条件运算符介绍: ### 逻辑运算符 逻辑运算符用于连接多个条件表达式,常见的逻辑运算符有 `&&`(逻辑与)、`||`(逻辑或)和 `!`(逻辑非)。示例如下: ```bash #!/bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]]; then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]]; then echo "返回 true" else echo "返回 false" fi ``` 在上述代码中,`&&` 表示只有当两边的条件都为真时,整个表达式才为真;`||` 表示只要两边的条件中有一个为真,整个表达式就为真 [^1]。 ### 布尔运算符 布尔运算符用于比较两个数值或者字符串逻辑上是否相等、不等,或者判断真假,其结果通常为 `true` 或 `false`。常见的布尔运算符如下: | 运算符 | 说明 | 举例 | | --- | --- | --- | | `!` | 非运算,取反,表达式为 `true` 则返回 `false`,否则返回 `true`。 | `[ ! false ]` 返回 `true`。 | | `-o` | or 或运算,有一个表达式为 `true` 则返回 `true`。 | `[ 表达式1 -o 表达式2 ]` | | `-a` | and 与运算,两个表达式都为 `true` 才返回 `true`。 | `[ 表达式1 -a 表达式2 ]` | 需要注意的是,布尔运算符只能放在 `[]` 中才有效 [^4]。 ### 文件测试运算符 文件测试运算符用于判断文件或目录的状态,常见的文件测试运算符如下: - `-e`:判断文件或目录是否存在。 - `-f`:判断是否为普通文件。 - `-d`:判断是否为目录。 - `-r`、`-w`、`-x`:分别用于判断文件是否可读、可写、可执行。 示例代码如下: ```bash if [ -f "test_file.txt" ]; then echo "这是一个普通文件" fi ``` ### 字符串比较运算符 字符串比较运算符用于比较两个字符串是否相等或不相等,常见的字符串比较运算符如下: - `=`:判断两个字符串是否相等。 - `!=`:判断两个字符串是否不相等。 - `-z`:判断字符串是否为空。 示例代码如下: ```bash str1="hello" str2="hello" if [ "$str1" = "$str2" ]; then echo "两个字符串相等" fi ``` ### 数值比较运算符 数值比较运算符用于比较两个数值的大小关系,常见的数值比较运算符如下: - `-eq`:判断两个数值是否相等。 - `-ne`:判断两个数值是否不相等。 - `-gt`、`-lt`、`-ge`、`-le`:分别用于判断大于、小于、大于等于、小于等于。 示例代码如下: ```bash num1=10 num2=20 if [ $num1 -lt $num2 ]; then echo "num1 小于 num2" fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值