Linux扩展篇-shell编程(五)-流程控制(一)-if语句
基本语法:
(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语句的更多相关文章
- shell编程 之 流程控制(条件语句和循环语句)
1 if ...else... 基本格式: if condition then commend else commend fi 当然也可以写到一行,用[ ]表明边界,用:表示分行.比如: if [ $ ...
- Linux学习笔记(18) Shell编程之流程控制
1. if语句 (1) 单分支if条件语句 格式为: # 注意条件判断式两端的空格if [ 条件判断式 ];then 程序员 fi 或者 if[ 条件判断式 ] then 程序 fi 例:判断分区使用 ...
- 自动化运维:(2)Shell 编程的流程控制
一. if语句 1.单分支if语句——单一条件,只有一个输出 #!/bin/bash # 单if语句的使用场景 if [ "$1" == "nan" ] the ...
- shell编程之流程控制
-d 判断该文件是否存在,并且是否为目录文件 -e 判断该文件是否存在 -f 判断该文件是否存在,并且是否为普通文件 形式 [ -e /home/cao/test.txt ] -r 文件 判断该文 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- Linux学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- Shell命令和流程控制
Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
- iOS开发Swift篇—(六)流程控制
iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...
- shell脚本之流程控制
shell脚本之流程控制 shell脚本之流程控制 条件语句 条件判断 循环语句for,while,until for循环 while循环 until循环 循环控制语句continue 循环控制语 ...
- Java编程基础——流程控制
Java编程基础——流程控制 摘要:本文主要介绍Java编程中的流程控制语句. 分类 流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下三种: 顺序结构:从上到下依次执行每条语句操作 ...
随机推荐
- Flutter+FaaS一体化任务编排的思考与设计
作者:闲鱼技术-古风 Flutter+Serverless三端一体研发架构,客户端不仅仅是编写双端的代码,而是扩展了客户端的工作边界,形成完整的业务闭环.在新的研发模式落地与实践的过程中,一直在思考如 ...
- 网易:Flink + Iceberg 数据湖探索与实践
导读:今天主要和大家交流的是网易在数据湖 Iceberg 的一些思考与实践.从网易在数据仓库建设中遇到的痛点出发,介绍对数据湖 Iceberg 的探索以及实践之路. 主要内容包括: 数据仓库平台建设的 ...
- 免费体验!阿里云智能LOGO帮你解决设计难题
简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...
- 国内唯一!阿里云容器服务进入 Forrester 领导者象限
简介:近日,国际权威咨询机构 Forrester 发布< The Forrester WaveTM: Public Cloud Container Platforms, Q1 2022 > ...
- 解决 Serverless 落地困难的关键,是给开发者足够的“安全感”
简介:越来越多的云产品都会向全托管.Serverless 形态演进.当云的产品体系 Serverless 化达到一个临界值,通过函数计算这样的 Serverless 计算服务结合其他 Serverl ...
- [FAQ] 腾讯企业邮箱成员的名字如何多次更改 ?
可以通过给成员的邮箱增加别名,先点击成员信息最右侧的 "编辑",在编辑页面顶部的 "更多操作" 这个按钮中,比较隐蔽. Refer:腾讯邮箱成员名字更改 Lin ...
- 二进制安装多master节点的k8s集群(2)
1.环境准备 k8s集群角色 IP 主机名 安装的组件 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.etcd.doc ...
- go实现发送邮件验证码
目录 开启SMTP服务: 发邮件测试 业务实现 开启SMTP服务: QQ邮箱参考下面连接: QQ邮箱如何开通SMTP服务 https://jingyan.baidu.com/article/00a07 ...
- Ubuntu空间不足,如何扩容
扩容多少看自己需求 点击确定然后打开虚拟机 使用工具的第一种方法 使用Ubuntu自带的disk,直接搜软件disk,点击进去 选择自己要扩容的磁盘 点击设置,选择resize 你要扩容到多少就拖动到 ...
- 纯JavaScript制作动态增加的网页数字
看到别的网页上打开,会显示一个动态的数字,感觉这个效果增加了网页的灵动感.就尝试着写代码,最终实现的方法: 会从0增加到一个数值,实现的代码: <!-- html 部分 --> <d ...