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编程中的流程控制语句. 分类 流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下三种: 顺序结构:从上到下依次执行每条语句操作 ...
随机推荐
- mysql8在Win10下安装教程
一.准备工作 下载mysql8安装包,下载URL地址:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/ 二.管理员权限执行 ...
- 云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator
作者 | 刘睿.杜恒 导读:RocketMQ Operator 现已加入 OperatorHub,正式进入 Operator 社区.本文将从实践出发,结合案例来说明,如何通过 RocketMQ Ope ...
- 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南
简介:业务上云常态化,业务在云上资源的选购.弹性交付.自助化成为大趋势.不同行业的不同客户,业务发展阶段不一样,云上资源的成本投入在业务整体成本占比也不一样,最小化成本投入.最大化业务收益始终是不同 ...
- 如何避免JS内存泄漏?
简介: 很多开发者可能平时并不关心自己维护的页面是否存在内存泄漏,原因可能是刚开始简单的页面内存泄漏的速度很缓慢,在造成严重卡顿之前可能就被用户刷新了,问题也就被隐藏了,但是随着页面越来越复杂,尤 ...
- C++ 多态与虚拟:Class 语法语义
1.object与class:在object-oriented programming编程领域,对象(object)有更严格的定义.对象是由数据结构和用于处理该结构的过程(称为methods)组成的实 ...
- [FE] Canvas 转图片并下载的方式
先获取 canvas 节点,使用 toDataURL 转为 image 数据,最后使用 a 链接下载. // Trans to image const canvas = document.getEle ...
- [Blockchain] Cosmos Starport 安装的三种方式
官方二进制包方式: # 下载 starport 二进制到 /usr/local/bin $ curl https://get.starport.network/starport! | bash # ...
- [Go] Viper 加载项目配置,go build 打包配置文件进二进制
Viper 的传统用法局部,加载到某个 package 下的全局变量后,其它 package 可以继续使用. var Conf *viper.Viper func init() { // File n ...
- 羽夏逆向破解日记簿——关于逆向epub格式转化器与思考
看前必读 本软件是商业软件,本篇文章仅仅介绍 逆向分析过程 和 关于开发软件防止逆向的思考 ,不会提供任何成品破解补丁或成品软件,仅限用于学习和研究目的,否则,一切后果自负.您必须在下载后的24个 ...
- 构造照亮世界——快速沃尔什变换 (FWT)
博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换(FWT)是解决这样一类卷积问题: \[c_i=\sum_{i=j\odot k}a_jb_k \] 其中,\(\odot\) 是位运算的 ...