13.bash shell中的if-then语句

文章目录

  • shell中的流控制if语句
    • if语句
      • if-then语句
      • if-then-else 语句
    • test命令
    • 数值比较
    • 字符串比较
    • 文件比较
    • `case`语句


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


shell中的流控制if语句

简单的脚本可以只包含顺序执行的命令,但结构化命令允许根据条件改变程序执行的顺序。

if语句

if-then语句

if-then语句格式如下:

if command
thencommands
fi

在其他编程语言中, if 语句之后的对象是一个等式,这个等式的求值结果为 TRUEFALSEbash shellif 语句会运行 if 后面的那个命令。如果该命令的退出状态码是0,位于 then 部分的命令就会被执行。

#!/bin/bash
if pwd
thenecho "pwd worked"
fi

输出:

# rob@xx-rob:~$ ./test1
/home/rob
pwd worked

if-then-else 语句

格式:

if command
thencommands
elsecommands
fi

示例:

v=bin
if grep $v pwd
thenecho "pwd worked"
elseecho "cannot find $v"
fi

结果:

rob@xx-rob:~$ ./test1
# grep: pwd: 没有那个文件或目录
# cannot find bin

if还可以嵌套多层:

if command1
then
command set 1
elif command2
then
command set 2
elif command3
then
command set 3
elif command4
then
command set 4
fi

test命令

bash shell if语句的条件是command,如果要使用常规的数值/字符串比较条件,需要使用test命令。

使用test命令的if-then-fi语句:

if test condition
then
commands
fi

如果不写 test 命令的condition部分,它会以非零的退出状态码退出,并执行 else语句块。

加入条件时,test 命令会测试该条件。

bash shelltest命令的另外一种写法是使用[ condition ] 中括号,第一个方括号之后和第二个方括号之前必须加上一个空格,
否则就会报错。

if中条件判断的几个条件:

  • 判断变量是否有值if test ${variable}
  • 数值比较
  • 字符串比较
  • 文件比较

数值比较

test命令的数值比较功能:

比较描述
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
if test 100 -le 145; thenecho "100 is smaller than 145"
fiv=12
if [ $v -eq 12 ];thenecho "value is 12"
fi

bash shell只能处理整数,不能使用浮点数作为判断条件。

字符串比较

bash shell条件测试还允许比较字符串值,比较字符串比较烦琐。

比较描述
str1 = str2检查 str1 是否和 str2 相同
str1 != str2检查 str1 是否和 str2 不同
str1 < str2检查 str1 是否比 str2 小
str1 > str2检查 str1 是否比 str2 大
-n str1检查 str1 的长度是否非0
-z str1检查 str1 的长度是否为0

bash sehll中比较运算符需要使用转义,否则会被当成重定向运算符。


s1="val"
s2="thi"# 升成`thi`的文件
if [ $s1 > $s2 ];
thenecho "new file $v2 has been created."
fiif [ $s1 \> $s2 ];
thenecho "$s1 is greater than $s2."
fi

比较测试中使用的是标准的ASCII顺序,根据每个字符的ASCII数值来决定排序结果。在比较测试中,大写字母被认为是小于小写字母的。

文件比较

测试Linux文件系统上文件和目录的状态。

命令描述
-d file检查 file 是否存在并是一个目录
-e file检查 file 是否存在
-f file检查 file 是否存在并是一个文件
-r file检查 file 是否存在并可读
-s file检查 file 是否存在并非空
-w file检查 file 是否存在并可写
-x file检查 file 是否存在并可执行
-O file检查 file 是否存在并属当前用户所有
-G file检查 file 是否存在并且默认组与当前用户相同
file1 -nt file2检查 file1 是否比 file2 新
file1 -ot file2检查 file1 是否比 file2 旧

if-then 语句允许你使用布尔逻辑来组合测试,有两种布尔运算符可用:

  • [ condition1 ] && [ condition2 ]
  • [ condition1 ] || [ condition2 ]

case语句

在尝试计算一个变量的值,在一组可能的值中寻找特定值,可能不得不写出很长的 if-then-else语句。case
令会采用列表格式来检查单个变量的多个值。

case variable inpattern1 | pattern2) commands1;;pattern3) commands2;;*) default commands;;
esac

一个例子:

c=1
case $c in
1 | 2) echo "1";;
3) echo "23";;
esac



欢迎访问个人网络日志🌹🌹知行空间🌹🌹


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法问题

7.设有n 种物品&#xff0c;每种物品有一个重量及一个价值。但每种物品的数量是无限的&#xff0c;同时有一个背包&#xff0c; 最大载重量为M&#xff0c;今从n 种物品中选取若干件(同一种物品可以多次选取)&#xff0c;使其重量的和小于等于M&#xff0c; 而价值的和为最大。…

IOS贝塞尔曲线圆形进度条和加载动画

做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加。其中主要用到贝塞尔曲线。UIBezierPath是对CGContextRef的进一步封装,不多说直接上代码&#xff1a; #import <UIKit/UIKit.h>interface CircleLoader : …

CM3计算板EC20模组拨号上网

1、安装 ppp 安装ppp&#xff1a;sudo apt-get install ppp 2、配置路由 查看路由和网卡 ifconfig ; route -n增加路由设备&#xff1a; sudo route add default dev ppp0 3、执行拨号脚本 进入linux-ppp-scripts 文件下&#xff1a;sudo ./quectel-pppd.sh /dev/ttyUSB3 …

[react] 你是如何划分React组件的?

[react] 你是如何划分React组件的&#xff1f; 可复用的功能 可复用的页面 当你在多个地方写一样或类似的代码时&#xff0c;就该考虑封装组件 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录…

VLC播放器安装

From: http://blog.csdn.net/lqrensn/article/details/6179171 想边上班边听歌&#xff0c;可惜办公电脑有点差&#xff0c;所以装的是fedora 10.又用的是代理上网&#xff0c;网速严重受限&#xff0c;同事传了些mp3,居然听不了&#xff0c;没mp3解码器&#xff0c;晕倒。。…

Linux安装配置apache

1.获取软件&#xff1a; http://httpd.apache.org/ httpd-2.2.21.tar.gz wget http://apache.fayea.com//httpd/httpd-2.2.31.tar.gz 2.安装步骤&#xff1a; 解压源文件&#xff1a; 1 tar zvxf httpd-2.2.21.tar.gz 2 cd httpd-2.2.213 ./configure --prefix/usr/local/apac…

CM3计算板I/O编程

1、CM3计算板的IO资源 CM3支持的I/O管脚数为54个&#xff0c;每个管脚包括一个或多个复用功能&#xff0c;分别位于ALT0~ALT5&#xff0c;如下表&#xff1a; 2、设备树启用IO外设的方式 通过在/boot/config.txt 文件中描述IO行为&#xff0c;可以在系统启动时&#xff0c;初…

Apt-get使用指南

From: http://bbs.chinaunix.net/thread-2115236-1-1.html 命令 下面将要介绍的所有命令都需要sudo&#xff01;使用时请将“packagename”和“string”替换成您想要安装或者查找的程序。 apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後运行…

[react] 在JSX中如何写注释?

[react] 在JSX中如何写注释&#xff1f; {/* A JSX comment */} 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

重构:改善既有代码的设计(评注版) 评注者序

重构&#xff1a;改善既有代码的设计&#xff08;评注版&#xff09; 评注者序评注者序近十年来&#xff0c;若要讨论如何改进代码的质量&#xff0c;很难绕过Martin Fowler的这本经典著作。这本书已经影响了几代程序员&#xff0c;或许会持续不断地影响未来的一批程序员。遗憾…

BusyBox编译配置

1. 下载Busybox tar包&#xff0c;如busybox-1.23.0.tar.bz2。 官网&#xff1a;http://www.busybox.net/ 2. make distclean&#xff1b;清除原有配置 make menuconfig; 配置命令选项 make&#xff1b;编译 make install&#xff1b;安装编译文件&#xff0c;主要为bin, s…

python类型转换、数值操作

From: http://canofy.iteye.com/blog/298263 python类型转换 Java代码 函数 描述 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]…

串口字符传输时间计算

1、字符时间 串口字符发送时间可根据串口参数配置计算&#xff0c;计算示例如下&#xff1a; e.g.1. 固定起始位1位&#xff0c;数据位8位&#xff0c;奇校验位1位&#xff0c;停止位1位&#xff0c;波特率9600bps&#xff0c;计算单个字符传输时间为&#xff1a; &#xff…

[react] React什么是有状态组件?

[react] React什么是有状态组件&#xff1f; 有状态的组件总是一个类组件,并且拥有一个在构造函数中初始化的state 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题…

Bloomfilter 的应用场景

Bloomfilter 一般用于检测某元素是否在集合中存在&#xff0c;它的目标是解决在大数据量情况的元素判定。它的优点是它提供的数据结构具有非常高的时间查询和空间存储效率&#xff0c;缺点是可能造成误判&#xff0c;就是说&#xff0c;它判定某元素在集合中&#xff0c;但是其…

运放搭建的窗口电压比较器电路

1、窗口比较器 设输入电压为Vin&#xff0c;输入范围为&#xff08;-V1~V2&#xff09;&#xff0c;要求设计电路识别输入是否在给定的电压区间&#xff08;Vd~Vt&#xff09;。 可以设计为一个电压窗口比较电路&#xff0c;窗口电压VwVsδ&#xff0c;Vs为窗口基准电压&…

ImageView倒影效果

先看下效果图&#xff1a;import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphi…

在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别

转自&#xff1a;http://blog.csdn.net/zoohouse/article/details/7552594 概述&#xff1a; “刷新”是在你现有页面的基础上&#xff0c;检查网页是否有更新的内容。在检查时&#xff0c;会保留之前的一些变量的值&#xff0c;因此有可能会造成刷新后网页出现错误&#xff0c…

[react] 为什么建议Fragment包裹元素?它的简写是什么?

[react] 为什么建议Fragment包裹元素&#xff1f;它的简写是什么&#xff1f; 为一个组件添加多个元素,可以讲你的子组件列表添加到一个分组中(<></>),并且不会再DOM增加额外节点 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&…

uboot开机logo

From: http://blog.chinaunix.net/uid-9688646-id-1998453.html 参考资料&#xff1a; 【1】U-boot开机logo的制作方法&#xff08;Tekkaman Ninja&#xff09;&#xff1a;http://blog.chinaunix.net/u1/34474/showart_2085233.html 【2】U-Boot中的Splash Screen&#xff0…