Shell中的括号、方括号、双括号和双方括号使用场景总结
程序员文章站
2022-06-04 11:20:29
...
-
前言
最近在学习Shell脚本编程时,发现别人程序的 if-then代码块 中if的条件语句中存在 双括号(())、双中括号[[]] 的使用,因而查阅了相关资料,同时也看到了一篇不错的博文,对Shell脚本中括号的使用作出了总结,特此记录和分享
-
2. 方括号[ ]
-
由于 if-then语句 不能测试命令状态码之外的条件,所以Bash Shell提供了 test命令 用于帮助 if-then语句 测试其他的条件,如数值比较、字符串比较、文件比较等,而test命令的简写形式就是方括号[ ],其中第一个方括号和第二个方括号之前都必须加上空格,否则会报错
-
2.1 数值比较
比较 | 描述 |
---|---|
n1 -eq n2 | 检查n1是否与n2相等 |
n1 -ge n2 | 检查n1是否大于或等于n2 |
n1 -gt n2 | 检查n1是否大于n2 |
n1 -le n2 | 检查n1是否小于或等于n2 |
n1 -lt n2 | 检查n1是否小于n2 |
n1 -ne n2 | 检查n1是否不等于n2 |
-
示例如下:
#!/bin/bash # 1. 数值比较 n1=20 n2=10 if [ $n1 -ge $n2 ]; then echo "n1 is greater than or euqal to n2" else echo "n1 is less than n2" fi
-
注意:Bash Shell只能直接处理整数,赋值浮点数会报错
-
2.2 字符串比较
比较 | 描述 |
---|---|
str1 = str2 | 检查str1是否和str2相同 |
str1 != str2 | 检查str1是否和str2不同 |
str1 < str2 | 检查str1是否比str2小 |
str1 > str2 | 检查str1是否比str2大 |
-n str1 | 检查str1的长度是否非0 |
-z str1 | 检查str1的长度是否为0 |
-
示例如下:
# 2. 字符串比较 user=root if [ $(whoami)=$user ]; then echo "root is online" else echo "root is offline" fi
-
2.3 文件比较
比较 | 描述 |
---|---|
-d file | 检查file是否存在并是一个目录 |
-e file | 检查file是否存在 |
-f file | 检查file是否存在并是一个文件 |
-r file | 检查file是否存在并可读 |
-s file | 检查file是否存在并非空 |
-w file | 检查file是否存在并可写 |
-x file | 检查file是否存在并可执行 |
-O file | 检查file是否存在并属当前用户所有 |
-x file | 检查file是否存在并可执行 |
-G file | 检查file是否存在并且默认组与当前用户相同 |
file1 -nt file2 | 检查file1是否比file2新 |
file1 -ot file2 | 检查file1是否比file2旧 |
-
示例如下:
# 3. 文件比较 fileName=test3 if [ -e $fileName ]; then echo "$fileName exists" else echo "$fileName doesn't exists" fi
符号 | 描述 |
---|---|
val++ | 后增 |
val-- | 后减 |
++val | 先增 |
--val | 先减 |
! | 逻辑求反 |
~ | 按位求反 |
** | 幂运算 |
<< | 左移位 |
>> | 右移位 |
& | 布尔与 |
| | 布尔或 |
&& | 逻辑与 |
|| | 逻辑或 |
-
示例如下:
#!/bin/bash # 双括号使用练习 var1=10 if (($var1 >= 10)); then for ((i = 0; i < 3; i++)); do echo $i done fi
-
4. 双方括号[[ ]]
-
双方括号提供了针对字符串比较的高级特性,能够使用数学符号比较字符串,并实现了模式匹配
#!/bin/bash # 双方括号使用练习 fileName=test5 if [[ $fileName==test* ]]; then echo "This is a test file!" if [[ $fileName==test5 ]]; then echo "This file is test5!" fi fi
-
注意:不是所有的Shell都支持双方括号
《Linux命令行与shell脚本编程大全(第三版)》