基本语法:

(1)单分支

if [ condition ];then
statement(s)
fi 或 if [ condition ]
then
statement(s)
fi

(2)多分支

if [ condition1 ]; then
statement1(s)
elif [ condition2 ]; then
statement2(s)
else
statement3(s)
fi

注意事项:

  • if 开始 fi 结尾,当then和if在同一行的时候需要使用分号;不在同一行时,可直接输入。
  • [后面和]前面都必须要有空格
  • 对于变量的处理,需要加引号,以避免不必要的错误。没有加双引号会在一些含空格等的字符串变量判断的时候产生错误。比如 [ -n "$var" ],如果var为空会出错。
  • 不支持浮点数的判断
  • 未定义的变量,在使用-z或者-n来检查长度时,值也为0
  • 空变量未初始化的变量,在执行shell脚本时会出现意外报错,在使用前用-n或者-z进行判断。
  • $? 上一条命令执行的退出状态,可以用来作为判断。

实践:

(1)简单的判断

[root@kwephis1160698 ~]# a=25
[root@kwephis1160698 ~]# if[ $a -gt 18 ];then echo Ok; fi
-bash: syntax error near unexpected token `then'
[root@kwephis1160698 ~]# if[ $a -gt 18 ]; then echo Ok; fi
-bash: syntax error near unexpected token `then'
[root@kwephis1160698 ~]# if [ $a -gt 18 ]; then echo Ok; fi
Ok
[root@kwephis1160698 ~]# echo $a
25
[root@kwephis1160698 ~]# if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo Ok; fi
Ok
[root@kwephis1160698 ~]# a=15
[root@kwephis1160698 ~]# if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo Ok; fi
[root@kwephis1160698 ~]#
[root@kwephis1160698 ~]# if [ $a -gt 18 && $a -lt 35 ]; then echo Ok; fi
-bash: [: missing `]'
[root@kwephis1160698 ~]# if [ $a -gt 18 -a $a -lt 35 ]; then echo Ok; fi
[root@kwephis1160698 ~]# a=25
[root@kwephis1160698 ~]# if [ $a -gt 18 -a $a -lt 35 ]; then echo Ok; fi
Ok

解析:

在 [ 中使用逻辑运算符,需要使用 -a(and)或者 -o(or)。

在 [[ 中使用逻辑运算符,需要使用 && 或者 ||。

(2)字符串判断优化

[root@kwephis1160698 ~]# vi if_test.sh
[root@kwephis1160698 ~]#
#!/bin/bash if [ $1 = hello ]
then
echo "hello"
fi
[root@kwephis1160698 ~]# chmod +x if_test.sh
[root@kwephis1160698 ~]# ./if_test.sh
./if_test.sh: line 3: [: =: unary operator expected [root@kwephis1160698 ~]# vi if_test.sh
[root@kwephis1160698 ~]#
#!/bin/bash if [ "$1"x = "hello"x ]
then
echo "hello"
fi
[root@kwephis1160698 ~]# ./if_test.sh
[root@kwephis1160698 ~]#

如果参数为空值,则程序会出现报错;建议,在字符串比较时,添加x,这样可以保证至少有一个字符可以比较。

Linux扩展篇-shell编程(五)-流程控制(一)-if语句的更多相关文章

  1. shell编程 之 流程控制(条件语句和循环语句)

    1 if ...else... 基本格式: if condition then commend else commend fi 当然也可以写到一行,用[ ]表明边界,用:表示分行.比如: if [ $ ...

  2. Linux学习笔记(18) Shell编程之流程控制

    1. if语句 (1) 单分支if条件语句 格式为: # 注意条件判断式两端的空格if [ 条件判断式 ];then 程序员 fi 或者 if[ 条件判断式 ] then 程序 fi 例:判断分区使用 ...

  3. 自动化运维:(2)Shell 编程的流程控制

    一. if语句 1.单分支if语句——单一条件,只有一个输出 #!/bin/bash # 单if语句的使用场景 if [ "$1" == "nan" ] the ...

  4. shell编程之流程控制

    -d 判断该文件是否存在,并且是否为目录文件 -e 判断该文件是否存在 -f 判断该文件是否存在,并且是否为普通文件 形式 [ -e   /home/cao/test.txt ] -r 文件 判断该文 ...

  5. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  6. Linux学习之Shell编程基础

    转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...

  7. Shell命令和流程控制

    Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...

  8. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  9. shell脚本之流程控制

      shell脚本之流程控制 shell脚本之流程控制 条件语句 条件判断 循环语句for,while,until for循环 while循环 until循环 循环控制语句continue 循环控制语 ...

  10. Java编程基础——流程控制

    Java编程基础——流程控制 摘要:本文主要介绍Java编程中的流程控制语句. 分类 流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下三种: 顺序结构:从上到下依次执行每条语句操作 ...

随机推荐

  1. MySQL正则表达式:REGEXP 和 LIKE

    正则表达式作用: 根据指定的匹配模式匹配文中符合要求的特殊字符. REGEXP : ①操作符中常用的匹配列表: ②匹配特殊字符使用\\进行转义 \\.   能够匹配 . \\f   换页 \\n 换行 ...

  2. 力扣520(java)-检测大写字母(简单)

    题目: 我们定义,在以下情况时,单词的大写用法是正确的: 1.全部字母都是大写,比如 "USA" .2.单词中所有字母都不是大写,比如 "leetcode" . ...

  3. 【pytorch学习】之概率

    6 概率 简单地说,机器学习就是做出预测.根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率.在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大.在强化学习 ...

  4. Quill富文本编辑器的实践 - DevUI

    DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工具类产 ...

  5. dotnet 统信 UOS 运行 UNO FrameBuffer 应用错误 Failed to open FrameBuffer device

    本文记录在 UOS 统信系统上运行 UNO 的基于 Skia 的 FrameBuffer 应用报错问题,错误提示是 Unhandled exception. System.InvalidOperati ...

  6. Kafka 监听器详解

    Kafka 监听器详解 Kafka Assistant 是一款 Kafka GUI 管理工具--管理Broker,Topic,Group.查看消费详情.监控服务器状态.支持多种消息格式. 目录 Kaf ...

  7. K8s控制器---Replicaset(7)

    一.Replicaset(目前少用了) 1.1 控制器管理pod 什么是控制器?前面我们学习了 Pod,那我们在定义 pod 资源时,可以直接创建一个 kind:Pod 类型的自主式 pod,但是这存 ...

  8. HZ2023 远足游记

    你说得对,但是我放假之前写的 P4689 代码没了 所以来摆 4.6(远足) 上午 走路,刚开始感觉没啥 走到园博园发现没预料中那么顺利 但是还感觉没啥 因为也没预料到 \(N·m\) 学校会让我们原 ...

  9. AI 编译器CINN中的OpLowering优化Pass

    一.Lower 主逻辑 在 OpLower::Lower() 接口中,主要分为两大类: Elementwise类,主要涉及的 OpPattern 包括:kElementwise .kBroadcast ...

  10. 关于Java Chassis 3的契约优先(API First)开发

    本文分享自华为云社区<Java Chassis 3技术解密:契约优先(API First)开发>,作者: liubao68. 契约优先(API First)开发是指应用程序开发过程中,将A ...