前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Shell编程】| if 判断的五个关键点

【Shell编程】| if 判断的五个关键点

作者头像
董哥聊技术
发布2023-08-29 16:30:44
2400
发布2023-08-29 16:30:44
举报
文章被收录于专栏:嵌入式艺术嵌入式艺术

我们在Shell脚本中,最常用的流程控制就是if比较语句了,当然你也许觉得它太小儿科,但是你真的了解透彻了吗?

最近在编写一些测试程序的时候,对if的使用较为片面,很多小的功能都需要去各个地方百度查询,极为不便,因此也想着空闲时候,对if进行详细总结,一来加深印象,二来是为了打造一个if语句的最详细的使用指南。

img

1、if语法格式

1.1 if格式

代码语言:javascript
复制
if condition;
then
 commands;
fi

1.2 else if 和 else

代码语言:javascript
复制
if condition;
then
 commands;
else if condition;
then 
 commands;
else 
 commands;
fi

if语法部分不用多少,主要在于用法多样!

2、算数比较

算数比较包括大于、小于、等于、不等于、大于等于、小于等于

运算符

说明

举例

-eq

equal,检测两个数是否相等,相等返回 true。

[ b ] 返回 false。

-ne

not equal,检测两个数是否不相等,不相等返回 true。

[ b ] 返回 true。

-gt

greater than,检测左边的数是否大于右边的,如果是,则返回 true。

[ b ] 返回 false。

-lt

less than,检测左边的数是否小于右边的,如果是,则返回 true。

[ b ] 返回 true。

-ge

greater equal,检测左边的数是否大于等于右边的,如果是,则返回 true。

[ b ] 返回 false。

-le

less equal,检测左边的数是否小于等于右边的,如果是,则返回 true。

[ b ] 返回 true。

a -eq

b ] 返回 false。-nenot equal,检测两个数是否不相等,不相等返回 true。[

a -ne

b ] 返回 true。-gtgreater than,检测左边的数是否大于右边的,如果是,则返回 true。[

a -gt

b ] 返回 false。-ltless than,检测左边的数是否小于右边的,如果是,则返回 true。[

a -lt

b ] 返回 true。-gegreater equal,检测左边的数是否大于等于右边的,如果是,则返回 true。[

a -ge

b ] 返回 false。-leless equal,检测左边的数是否小于等于右边的,如果是,则返回 true。[

a -le

b ] 返回 true。

比较条件通常被放置在封闭的中括号内。一定要注意在[或]与操作数之间有一个空格。 如果忘记了这个空格,脚本就会报错。

在算数比较运算中,少不了逻辑与、逻辑或、逻辑非运算。

运算符

说明

举例

!

非运算,表达式为 true 则返回 false,否则返回 true。

[ ! false ] 返回 true。

-o

或运算,有一个表达式为 true 则返回 true。

[ b -gt 100 ] 返回 true。

-a

与运算,两个表达式都为 true 才返回 true。

[ b -gt 100 ] 返回 false。

a -lt 20 -o

b -gt 100 ] 返回 true。-a与运算,两个表达式都为 true 才返回 true。[

a -lt 20 -a

b -gt 100 ] 返回 false。

3、文件判断

该部分主要包括:文件判断、目录判断、权限判断、是否存在判断等

操作符

说明

举例

-b file

检测文件是否是块设备文件,如果是,则返回 true。

[ -b $file ] 返回 false。

-c file

检测文件是否是字符设备文件,如果是,则返回 true。

[ -c $file ] 返回 false。

-d file

检测文件是否是目录,如果是,则返回 true。

[ -d $file ] 返回 false。

-f file

检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。

[ -f $file ] 返回 true。

-g file

检测文件是否设置了 SGID 位,如果是,则返回 true。

[ -g $file ] 返回 false。

-k file

检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。

[ -k $file ] 返回 false。

-p file

检测文件是否是有名管道,如果是,则返回 true。

[ -p $file ] 返回 false。

-u file

检测文件是否设置了 SUID 位,如果是,则返回 true。

[ -u $file ] 返回 false。

-r file

检测文件是否可读,如果是,则返回 true。

[ -r $file ] 返回 true。

-w file

检测文件是否可写,如果是,则返回 true。

[ -w $file ] 返回 true。

-x file

检测文件是否可执行,如果是,则返回 true。

[ -x $file ] 返回 true。

-s file

检测文件是否为空(文件大小是否大于0),不为空返回 true。

[ -s $file ] 返回 true。

-e file

检测文件(包括目录)是否存在,如果是,则返回 true。

[ -e $file ] 返回 true。

-L file

检测文件是否是符号链接,如果是,则返回为true。

[ -L $file ] 返回 true。

4、字符串判断

字符串操作判断包括:是否为空、两个字符串比较、字符串存在等 进行字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误。

运算符

说明

举例

=

检测两个字符串是否相等,相等返回 true。

[[ b ]] 或者 [[ b]] 返回 false。

!=

检测两个字符串是否不相等,不相等返回 true。

[[ b ]] 返回 true。

-z

检测字符串长度是否为0,为0返回 true。

[[ -z $a ]] 返回 false。

-n

检测字符串长度是否不为 0,不为 0 返回 true。

[[ -n "$a" ]] 返回 true。

$

检测字符串是否不为空,不为空返回 true。

[[ $a ]] 返回 true。

>

按照ASCII比较两个字符串字典排序,如果大于则为true

[[ str2 ]]

<

按照ASCII比较两个字符串字典排序,如果小于则为true

[[ str2 ]]

a =

b ]] 或者 [[

a ==

b]] 返回 false。!=检测两个字符串是否不相等,不相等返回 true。[[

a !=

b ]] 返回 true。-z检测字符串长度是否为0,为0返回 true。[[ -z $a ]] 返回 false。-n检测字符串长度是否不为 0,不为 0 返回 true。[[ -n "$a" ]] 返回 true。$检测字符串是否不为空,不为空返回 true。[[ $a ]] 返回 true。>按照ASCII比较两个字符串字典排序,如果大于则为true[[

str1 >

str2 ]]<按照ASCII比较两个字符串字典排序,如果小于则为true[[

str1 <

str2 ]]

5、test指令测试

test命令可以用来测试条件。用test可以避免使用过多的括号,增强代码的可读性。

代码语言:javascript
复制
if [ $var -eq 0 ]; then 
 echo "True"; 
fi

if test $var -eq 0 ; then 
 echo "True"; 
fi

注意,test是一个外部程序,需要衍生出对应的进程,而 [Bash的一个内部函数,因此后者的执行效率更高。 test兼容于Bourne shellashdash

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式艺术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、if语法格式
    • 1.1 if格式
      • 1.2 else if 和 else
      • 2、算数比较
      • 3、文件判断
      • 4、字符串判断
      • 5、test指令测试
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档