Linux shell(2)-结构化命令
1. if then 语句
- if + 命令1,命令1 如果正确执行则执行 then 后面的命令集,fi 为结束语句,示例如下:
1 |
|
- 案例
1 |
|
- 注意 if 后面只有一条命令,执行后正确才会执行下面的 then 语句内容,then 语句可以包含多条命令
2. if-then-else 语句
- 当 if 语句判断失败时,使用 else 语句可以很好的显示失败后的命令,else 语句和 then 语句一样,可以包含多条命令
1 |
|
- 案例:
1 |
|
3. 嵌套 if
- 使用 if 嵌套语句可以更精准的判断选择内容
1 |
|
- 案例1:
1 |
|
- elif-then 语句相当于 if-then 语句,我们可以使用 elif-then-else,
- 案例2:
1 |
|
4. 测试语句
4.1 [ command ]
- 使用中括号在配合 if 语句进行测试,如果中括号里面的命令正确则会继续执行后面的语句
- 注意中括号内命令的两侧要有空格 [ 命令 ]
1 |
|
4.2 test(不推荐)
1 |
|
- 可以使用 test 配合 if 语句进行测试,test 语句返回一个布尔值,布尔值为零。继续执行后面的内容,布尔值非零则会退出
1 |
|
- 案例
1 |
|
- 注意 test 后面要有命令,要不然就会返回一个非零的退出状态码,这样就会退出 if 语句
4.3 数值比较
- test 命令最常见的情形是对两个数值进行比较
- 当然 bash shell 对数值的处理仅限于整数
- 案例:
1 |
|
4.4 字符串比较
- 条件测试还允许比较字符串值。
4.4.1 字符串相等性
- 案例:
1 |
|
4.4.2 字符串顺序
大于号和小于号必须使用斜杠 \ 转义,否则shell会把它们当作重定向符号,把字符串值当作文件名;
大于和小于顺序和sort命令所采用的不同。test命令和测试表达式使用标准的数学比较符号来表示字符串比较,而用文本代码来表 示数值比较。
案例1:
1 |
|
- 案例2:
1 |
|
4.4.3 字符串大小
- -n和-z可以检查一个变量是否含有数据。
案例:
1 |
|
4.5 文件比较
- 测试Linux文件系统上文件和目录的状态。
- 案例:
- -d 测试会检查指定的目录是否存在于系统中。如果你打算将文件写入目录或是准备切换到某个目录中,先进行测试总是件好事情。
1 |
|
- 示例代码中使用了-d测试条件来检查jump_directory变量中的目录是否存在:若存在,就 使用cd命令切换到该目录并列出目录中的内容;若不存在,脚本就输出一条警告信息,然后退出。
5. 复合条件测试
- if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:
- [ condition1 ] && [ condition2 ]
- [ condition1 ] || [ condition2 ]
- 第一种布尔运算使用AND布尔运算符来组合两个条件。
- 第二种布尔运算使用OR布尔运算符来组合两个条件。
案例:
1 |
|
6. if-then 的高级特性
- bash shell提供了两项可在if-then语句中使用的高级特性:
- 用于数学表达式的双括号
- 用于高级字符串处理功能的双方括号
6.1 使用双括号
- 双括号命令允许你在比较过程中使用高级数学表达式。格式如下:
(( expression ))
- expression 可以是任意的数学赋值或比较表达式。
- 注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性
6.2 使用双方括号
- 双方括号命令提供了针对字符串比较的高级特性。格式如下:
[[ expression ]]
双方括号在bash shell中工作良好。不过不是所有的shell都支持双方括号。
案例:
1 |
|
7. case 命令
- 有了case命令,就不需要再写出所有的elif语句来不停地检查同一个变量的值了。case命 令会采用列表格式来检查单个变量的多个值。
1 |
|
- 案例:
1 |
|
参考文献
Linux shell(2)-结构化命令
https://oldstory.cn/2022/01/07/linux_shell_2_jie_gou_hua_ming_ling/