shell脚本中几种条件判断结构

1. test[ ]

1.1 运算符

test[ ]是等价的,兼容性最好,都是 POSIX 标准,在各种 Shell 环境中都能工作(包括 /bin/sh

可以判断三类条件:

  • 整数比较-eq/-ne/-ge/-gt/-le/-lt
  • 字符串比较=/!=/</>/-n/-z
  • 文件比较-d/-e/-f/-r/-s/-w/-x/-O/-G/-nt/-ot

1.2 复合逻辑判断

  1. 逻辑与:&&-a✅推荐:[ "$a" -lt 10 ] && [ "$b" -gt 5 ]❌不推荐:[ "$a" -lt 10 -a "$b" -gt 5 ]
  2. 逻辑或: -o||✅推荐:[ "$a" -lt 10 ] || [ "$b" -gt 5 ]❌不推荐:[ "$a" -lt 10 -o "$b" -gt 5 ]
  3. 逻辑非:![ ! "$a" -lt 10 ]注意:!后面一定要加上一个空格,否则会把!和后面$a的内容当做一个整体的字符串。

1.3 注意点

  1. 每个变量都应加引号以防止空值引起语法错误

如果不加引号,当$a为空时,shell 会把[ $a == "hello" ]解释成[ == "hello" ],因为缺少一个操作数,所以脚本会报错。

 a=""
 if [ $a == "hello" ]; then
  echo "OK"

如果加引号,当$a为空时,shell 会把[ "$a" == "hello" ]解释成[ "" == "hello" ],这样可以确保空值也能被正常处理

 a=""
 if [ "$a" == "hello" ]; then
  echo "OK"
  1. 字符串比较中,><必须转义,否则 shell 会把它们当做重定向符号
 if [ $val1 \> $val2 ] # 这里需要转义符号
  1. 只能处理整数数值,不能处理浮点数
  2. test <condition>[ <condition> ]等价比如[ "$a" -lt 10 ] && [ "$b" -gt 5 ]test "$a" -lt 10 && test "$b" -gt 5是一样的

2. [[ ]]

2.1 [[ ]][]的相同点

[[ ]]是 Bash 提供的增强型条件判断语法,可以完全兼容[ ]条件判断,但不适用于/bin/sh

2.2 [[ ]][]的不同点

在整数比较、文件比较上,与[]是一致的,但字符串比较功能更丰富,支持通配符以及正则表达式(使用=~),如:

  • 通配符:[[ $var == *.txt ]]`
  • 正则表达式:[[ $var =~ ^file[0-9]+\.txt$ ]]

另外,还有以下不同点:

  1. 不需要引号,可以安全地使用变量,即使变量为空或包含空格,shell 会自动处理 a=””
     if [ $a = “hello” ]; then
         echo “OK”
  2. 不需要多个[[ ]]来构建复合逻辑判断使用[ ]时,复合逻辑判断: [ "$a" -lt 10 ] && [ "$b" -gt 5 ];使用[[ ]]时,复合逻辑判断可以直接在一个[[ ]]中:[[ $a -lt 10 && $b -gt 5 ]]
  3. 字符串比较中,><不需要转义

3. (( ))

3.1 运算符汇总

(( ))是 Bash 中专门用于整数算数运算和整数条件判断的语法。

算数运算符

+/-/*///%/val++/val--/++val/--val/**

位运算符

~/&/|/<</>>

比较运算符

>/</>=/<=/==/!=

逻辑运算符

&&/||/!

3.2 注意点

  1. ><不需要转义
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇