1. if-then 语句

最基本的结构化命令就是 if-then 语句。 if-then 语句有如下格式。bash shell的 if 语句会运行 if 后面的那个命令。如果该命令的退出状态码是 0即该命令运行成功,位于 then 部分的命令就会被执行。如果该命令的退出状态码是其他值, then部分的命令就不会被执行。fi 语句用来表示 if-then语句到此结束。

if command
thencommands
fi语句形式还可以写成这样
if command; thencommands
fi

2. if-then-else 语句

if-then 语句中,不管命令是否成功执行,你都只有一种选择。如果命令返回一个非零退出状态码,bash shell会继续执行脚本中的下一条命令。在这种情况下,如果能够执行另一组命令就更好了。这正是 if-then-else 语句的作用。

if command
thencommands
elsecommands
fi

3. 嵌套 if 语句

嵌套 if 语句并不是新的语句格式,只不过在 if 语句内部中再次,或多次使用 if 语句。

if command1
thencommands
elseif command2thencommandsfi
fi

4. 多分支 if-elif 语句

if-else 最多只能应对两种情况,但是很多时候你需要应对更多的情形,所以在 shell 编程中可以使用 if-elif
if-elif-else 语句。

if command1
thencommands
elif command2
thenothers commands
fi

5. test 命令

if 语句中看到的都是普通 shell 命令。if-then 语句不能测试命令退出状态码之外的条件。所以在 bash shell 中提供了 test 命令帮你通过 if-then 语句测试其他条件。test 命令可以判断三类条件:

  • 数值比较
  • 字符串比较
  • 文件比较

test 命令的格式如下:
test condition

test 命令配合 if 格式如下:

if test condition
thencommands
fi

5.1 数值比较

使用 test 命令最常见的情形是对两个数值进行比较。表12-1列出了测试两个值时可用的条件
参数。

       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
------------------+---------------------

例如,大于:

a=6if [ $a -gt 5 ]
thenecho "a>5"
fi

例如,等于:

a=5if [ $a -eq 5 ]
thenecho "a=5"
elseecho "a!=5"
fi

例如,小于:

a=3if [ $a -lt 5 ]
thenecho "a<5"
fi

5.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
-------------+----------------------------

例如,判断字符串是否为空:

a=helloif [ -n $a ]
thenecho "'$a' is not empty"
elseecho "'$a' is empty"
fi

5.3 文件比较

        test 命令的文件比较功能
----------------+--------------------------------------------
比 较            |         描 述
----------------+--------------------------------------------
-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 旧
----------------+--------------------------------------------

例如,检查目录:

dir=/home/zhbiif [ -d $dir ]
thenecho "$dir exists"
elseecho "$dir does not exist"
fi

6. if-then 高级特性

bash shell 提供了两项可在 if-then 语句中使用的高级特性:

  • 用于数学表达式的双括号 (( expression ))
  • 用于高级字符串处理功能的双方括号 [[ expression ]]

6.1. 双方括号用法

双括号命令符号:

  双括号命令符号
--------+---------符 号 | 描 述
--------+---------val++  | 后增val--  | 后减++val  | 先增--val  | 先减!      | 逻辑求反~      | 位求反**     | 幂运算<<     | 左位移>>     | 右位移&      | 位布尔和|      | 位布尔或&&     | 逻辑和||     | 逻辑或
--------+---------

双括号命令使用:

a=10if (( $a ** 2 > 90 ))
then(( b = $a ** 2 ))echo "The square of $a is $b"
fi

6.2 使用双方括号

注意,不是所有的shell都支持双方括号。在下面的脚本中,我们使用了双等号( == )。双等号将右边的字符串( r* )视为一个模式,并应用模式匹配规则。双方括号命令 $usr环境变量进行匹配,看它是否以字母 r 开头。如果是的话,比较通过,shell会执行 then 部分的命令。

if [[ $usr == r* ]]
thenecho "Hello $user"
elseecho "Sorry, I do not know you"
fi

7. case 命令

s="word"case $s in"hello") echo This is hello;;"word") echo This is word;;"A" | "B") echo good;;
esac

shell if 命令相关推荐

  1. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的集群搭建以及shell启动命令脚本编写 一.搭建 ...

  2. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell p ...

  3. Shell test命令(Shell [])详解,附带所有选项及说明

    test 是 Shell 内置命令,用来检测某个条件是否成立.test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 test. test 命令有很多选项,可以进行数值.字符串和文件三个方 ...

  4. Shell+Linux命令实现日志分析

    这篇文章主要介绍了Shell+Linux命令实现日志分析,本文给出了结合grep命令.awk命令等实现了几个常用的日志分析统计长命令,需要的朋友可以参考下 一.列出当天访问次数最多的IP 命令: 复制 ...

  5. 【Linux】1.shell各个命令

    shell各个命令 1.符号参数 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数.如"$*"用「"」括起来的情况.以"$1 $2 - ...

  6. shell 常用命令

    shell 常用命令 Shell基本命令 几个基本的shell命令,用ssh管理主机必备. 1.ls  列出目录下的文件,不同类型的文件颜色不同,例如蓝色是文件夹,白色是文件 [root@restor ...

  7. linux中Shell历史命令记录文件的路径是什么

    Bash shell在"~/.bash_history"("~/"表示用户目录)文件中保存了500条使用过的命令,这样能使你输入使用过的长命令变得容易.每个在系 ...

  8. UEFI Shell 常用命令

    UEFI Shell 常用命令 分类:IT技术 2013-09-11 16:49阅读(14542)评论(0) EFI是Extensible Firmware Interface的缩写,是介于平台固件和 ...

  9. expr命令 linux,Shell expr命令进行整数计算的实现

    expr 是 evaluate expressions 的缩写,译为"表达式求值".Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些 ...

  10. linux中的变量文件路径,Linux库文件和Shell可执行程序命令文件搜索路径变量的设置...

    一.库文件的搜索路径: 1.在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存 ...

最新文章

  1. PHP的一种缓存方案静态化
  2. Windows的端口列表(转载)
  3. 快乐数(最终要变成1)
  4. CentOs7中安装sonarQube服务系列------3.安装SonarQube服务器
  5. 离散数学实验题目-图
  6. Nashorn如何在新层面上影响API的发展
  7. 文本或代码中 \n 和 \r 的区别
  8. LwIP应用开发笔记之二:LwIP无操作系统UDP服务器
  9. media jquery 适配ios不同手机
  10. C语言程序设计第四次作业
  11. Linux防火墙iptables配置详解
  12. JS 三级联动之 省市县。
  13. python统计大写辅音字母_大写
  14. xss.haozi.me通关记录
  15. git Untracked files
  16. 编码器SRT协议三种模式(listener, caller, rendezvous)简介
  17. Windows 10 微软官方下载工具
  18. 用m ip衡量的计算机性能指标是,ip网络技术要求网络性能参数与指标.pdf.pdf
  19. 树莓派 linux hook,树莓派制造日视/夜视串流直播摄像头
  20. IP地址划分, 常见的CIDR划分,子网掩码对应表及在线CIDR工具

热门文章

  1. HDU2067——小兔的棋盘(迷宫,动态规划,卡特兰数)
  2. Box2D在VS2010上面的配置
  3. 递归特征消除和K折交叉验证(以决策树回归为例)
  4. 仿天猫静态网页+仿天猫动态网页
  5. Elitebook 735 更换键盘
  6. python中创建字典的括号的使用_4.2Python下创建和使用字典
  7. Android矢量图pathData绘制规则及简单常用的矢量图绘制
  8. linux网络编程(1)
  9. XMLGregorianCalendar和Date之间的转换
  10. Vue+Echarts监控大屏实例五:呼叫中心监控模板实例