基本语法:

(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. Flutter+FaaS一体化任务编排的思考与设计

    作者:闲鱼技术-古风 Flutter+Serverless三端一体研发架构,客户端不仅仅是编写双端的代码,而是扩展了客户端的工作边界,形成完整的业务闭环.在新的研发模式落地与实践的过程中,一直在思考如 ...

  2. 网易:Flink + Iceberg 数据湖探索与实践

    导读:今天主要和大家交流的是网易在数据湖 Iceberg 的一些思考与实践.从网易在数据仓库建设中遇到的痛点出发,介绍对数据湖 Iceberg 的探索以及实践之路. 主要内容包括: 数据仓库平台建设的 ...

  3. 免费体验!阿里云智能LOGO帮你解决设计难题

    ​简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...

  4. 国内唯一!阿里云容器服务进入 Forrester 领导者象限

    ​简介:近日,国际权威咨询机构 Forrester 发布< The Forrester WaveTM: Public Cloud Container Platforms, Q1 2022 > ...

  5. 解决 Serverless 落地困难的关键,是给开发者足够的“安全感”

    ​简介:越来越多的云产品都会向全托管.Serverless 形态演进.当云的产品体系 Serverless 化达到一个临界值,通过函数计算这样的 Serverless 计算服务结合其他 Serverl ...

  6. [FAQ] 腾讯企业邮箱成员的名字如何多次更改 ?

    可以通过给成员的邮箱增加别名,先点击成员信息最右侧的 "编辑",在编辑页面顶部的 "更多操作" 这个按钮中,比较隐蔽. Refer:腾讯邮箱成员名字更改 Lin ...

  7. 二进制安装多master节点的k8s集群(2)

    1.环境准备 k8s集群角色 IP 主机名 安装的组件 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.etcd.doc ...

  8. go实现发送邮件验证码

    目录 开启SMTP服务: 发邮件测试 业务实现 开启SMTP服务: QQ邮箱参考下面连接: QQ邮箱如何开通SMTP服务 https://jingyan.baidu.com/article/00a07 ...

  9. Ubuntu空间不足,如何扩容

    扩容多少看自己需求 点击确定然后打开虚拟机 使用工具的第一种方法 使用Ubuntu自带的disk,直接搜软件disk,点击进去 选择自己要扩容的磁盘 点击设置,选择resize 你要扩容到多少就拖动到 ...

  10. 纯JavaScript制作动态增加的网页数字

    看到别的网页上打开,会显示一个动态的数字,感觉这个效果增加了网页的灵动感.就尝试着写代码,最终实现的方法: 会从0增加到一个数值,实现的代码: <!-- html 部分 --> <d ...