shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)
文章目录
- shell编程之条件语句
- 条件测试
- test命令
- 整数值测试
- free -m 提供了更简洁的查看系统内存使用情况:
- 字符串和逻辑测试
- 字符串
- 逻辑测试
- 一元运算符,二元运算符和三元运算符
- if语句
- if单分支语句
- if双分支语句(一看就懂)
- if多分支语句(一看就懂)
- case 命令
- 有趣小实验
shell编程之条件语句
简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程。
条件测试
test命令
-d 测试是否为目录(directory)
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(eXcute)
[root@localhost ~]# mkdir ccc
[root@localhost ~]# test -d ccc 测试是否是目录
[root@localhost ~]# echo $?
0 是
[root@localhost ~]# test -f ccc 测试是否是文件
[root@localhost ~]# echo $?
1 不是
[root@localhost ~]# [ -d ccc ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -f ccc ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -x ccc ] && echo "yes"
yes
[root@localhost ~]# [ -x ccc ] || echo "yes"
整数值测试
-eq 等于(Equal)
-ne 不等于(Not Equal)
-gt 大于(Greater Than)
-lt 小于(Lesser Than)
-le 小于或等于(Lesser or Equal)
-ge 大于或等于(Greater or Equal)
[root@localhost ~]# [ 5 -gt 3 ] && echo “yes”
“yes”
[root@localhost ~]# [ 5 -lt 3 ] && echo “yes”
[root@localhost ~]# [ 5 -eq 5 ] && echo “yes”
“yes”
free -m 提供了更简洁的查看系统内存使用情况:
[root@localhost ~]# free -m 提供了更简洁的查看系统内存使用情况:total used free shared buff/cache available
Mem: 3770 160 3408 11 201 3366
Swap: 3967 0 3967Mem:表示物理内存统计
Swap:表示硬盘上交换分区的使用情况
total1: 表示物理内存总量。
used1: 表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实
free1: 未被分配的内存。
shared1: 共享内存,一般系统不会用到,这里也不讨论
buffers1: 系统分配但未被使用的buffers 数量。
cached1: 系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
used2: 实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2: 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
字符串和逻辑测试
字符串
操作符 | 解释 |
---|---|
= | 第一个字符串与第二个字符串内容相同 |
!= | 第一个字符串与第二个字符串内容不同,!号表示相反的意思 |
-z | 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串 |
[root@localhost ~]# [ “男” != “男“ ] && echo "yes"
yes
[root@localhost ~]# [ “男” = “女“ ] && echo "yes"
[root@localhost ~]#
[root@192 ~]# vim 44.sh
#!/bin/bash
read -p "是后创建/opt/zhang目录: (yes/no)" ack
[ $ack = yes ] && mkdir /opt/zhang
echo "创建成功"
[root@192 ~]# sh 44.sh
是后创建/opt/share目录: (yes/no)yes
创建成功
[root@192 ~]# ls /opt
zhang
逻辑测试
操作符 | 解释 |
---|---|
&& | 而且”的意思 |
|| | 或者"的意思 |
! | 逻辑否 |
&&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断。
用 || 时,左端为真,右端不需要进行运算,结果直接为真
但&&和 || 更为高效一点,可以减少不必要的运算
[root@xue ~]# [ 1 -ne 2 ] && echo "yes"
yes
[root@localhost opt]# [ -d /opt/zhangsan ] && echo "yes"
yes
一元运算符,二元运算符和三元运算符
let 命令
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
i=i++:先赋值在运算i=++i:先自加在赋值i=–i:先自减在赋值
[root@192 ~]# echo $i
1
[root@192 ~]# let i=++i
[root@192 ~]# echo $i
2
[root@192 ~]# let i+=2 相当于i=i+2'
[root@192 ~]# echo $i
4
if语句
if单分支语句
单分支结构(基本格式)
if 条件测试操作then 命令序列
fi
实验
[root@localhost ~]# vim text
#!/bin/bsah
read -p "请输入目录位置: " FILE
if [ ! -d $FILE ]thenmkdir -p $FILE
fi
[root@localhost ~]# sh text
请输入目录位置: tesr
[root@localhost ~]# lstesr
if双分支语句(一看就懂)
双分支结构(基本格式)
if 条件测试操作then 命令序列1语句块1(条件成立)else 命令序列2语句块2(条件不成立)
fi
-------------------------------
搞笑解释
如果(if) [你有房]
那么(then)我就嫁给你
否则(else)good bye!
果如
实验
if双分支语句
[root@localhost ~]# vim text
#!/bin/bsah
read -p "请输入目录位置: " FILE
if [ -e $FILE ]thenmkdir -p $ FILE mkdir的-p选项允许你一次性创建多层次的目录elseecho "目录已存在"
fi
[root@localhost ~]# sh text
请输入目录位置: 12
目录已存在
判断主机是否在线
[root@localhost ~]# vim 3.txt
#!/bin/bash
read -p "请输入IP地址:" addr
ping -c 3 -i 0.2 -W 3 $addr &> /dev/null 《《 意思是把 标准输出 和 标准错误输出 都重定向到黑洞里
if [ $? -eq 0 ]thenecho "$addr is up"elseecho "$addr is down"
fi[root@localhost ~]# sh 3.txt
请输入IP地址:192.168.136.244
192.168.136.244 is up
-c:发送三个包
-i: 发包间隔0.2秒
-W:等待时间3秒
if多分支语句(一看就懂)
多分支结构(基本格式)
if 条件测试then 命令序列1语句块1(条件成立)
elif 条件测试操作2语句块1(条件成立)then 命令序列2
else 命令序列3
fi
--------------------------------------------
搞笑解释
如果(if) [你有房]
那么(then)我就嫁给你
或者(elif) [你爸是马云]
那么(then)我就嫁给你
或者(eilf) [你很努力很吃苦]
那么(then)我们可以先谈男女朋友
否则 (else)洗洗,早点睡吧
果如
实验
[root@xue ~]# vim grap.sh
#!/bin/bash
read -p "请输入你的分数(0-100: " GRADEif [ $GRADE -ge 0 ] && [ $GRADE -le 100 ]thenif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]thenecho "$GRADE分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]thenecho "$GRADE分,合格"elseecho “不合格”fiecho "请输入(0-100)区间 "fi[root@xue ~]# sh grap.sh
请输入你的分数(0-100: 111
请输入(0-100)区域指!
case 命令
case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。
格式
case $ake in[a-z]|[A-Z])echo "你的字母";;[0-9])echo "你的字母";;……*)echo "你的字母"
esac
[root@localhost ~]# vi pinghost.sh
read -p "请输入(0-100) 成绩: " score
case $score in8[5-9]|9[0-9]|100)echo "成绩优秀";;7[0-9]|8[0-4])echo "成绩良好";;6[0-9])echo "成绩合格";;
*)echo "成绩不合格" esac
有趣小实验
竞速比赛10秒进决赛,分男子组和女子
[root@xue ~]# sh run.sh
#!/bin/bash
#竞速比赛10秒进决赛,分男子组和女子组
read -p "请输入你的成绩" numif [ $num -ge 0 ]&&[ $num -le 10 ];thenread -p "请输入你的性别" sexif [ $sex = 男 ];thenecho "成绩合格,进入男子组"elif [ $sex = 女 ];thenecho "成绩合格,进入女子组 "else echo "请输入正确信息"fielse echo "成绩不及格,你被淘汰"
fi
[root@xue ~]# sh run.sh
请输入你的成绩10
请输入你的性别男
成绩合格,进入男子组
shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)相关推荐
- Shell编程之条件语句(if语句,case分支语句)
Shell编程之条件语句 一.条件测试操作 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if语句 单分支结构 双分支结构 多分支结构 三.case分支语句 一.条 ...
- Linux网络服务与shell脚本——Shell编程之条件语句
第八章 Shell编程之条件语句 一.条件测试 1.测试命令 (1)test 条件表达式 (2)[条件表达式] (3)$?:根据返回值判断前者是否成立 2.文件测试:根据指定路径名称,判断对应文件或目 ...
- Shell 编程4(退出,测试,判断)
1 退出状态 定义 在Linux系统中,每当命令执行完成后,系统都会返回一个退出状态.该退出状态用一整数值表示,用于判断命令运行正确与否.退出状态通常保存在预定义变量$?中. 若退出状态值为0,表示命 ...
- 你说shell编程的条件语句太难,我说那是你没看过这篇博客。
文章目录 一.条件测试操作 (一). 条件测试操作 1.test命令 (二).文件测试 1.文件测试基本格式 2.常见的测试操作符 (三).整数测试 1.整数值比较 2.常用的测试操作符 (四).字符 ...
- SHELL编程之条件测试
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.条件测试(1) 1.test测试操作 2.字符串比较 3.整数值比较 4.文本状态测试 二.条件测试(2) 1.控制操作 ...
- Shell编程之条件语句
目录 条件测试 条件测试操作-1 条件测试操作-2 条件测试操作-3 条件测试操作-4 条件测试操作-5 条件测试操作-6 条件测试操作-7 if语句的结构 单分支结 双分支结构 case语句结构 条 ...
- Shell编程之条件语句(if单分支、双分支、多分支、case多分支)
文章目录 1.条件测试操作 2.if语句的结构 1.单分支结构 2.双分支语句 3.多分支结构 4.case多分支语句 1.条件测试操作 test命令测试表达式是否成立,若成立返回0,否则返回其他数值 ...
- linux条件测试的三种,shell编程之条件测试 | 旺旺知识库
一.条件测试语法: test 测试内容 [ 测试内容 ] ##注意中括号与测试内容间有空格 [[ 测试内容 ]] (( 测试内容 )) ##只能用于测试数值大小,后面详解 前三种测试语法 ...
- linux判断搜索结果,shell编程之条件判断和find查询
使用read 来把输入值分配给一个或多个shell 变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量 所有剩余单词都被分配给最后一个变量 read ...
最新文章
- R使用pROC和ggplot2包绘制ROC曲线
- python打开excel的函数-Python读取excel文件中带公式的值的实现
- 【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
- [USACO1.1]坏掉的项链Broken Necklace
- 向maven中央仓库提交jar
- 配置终端服务连接的安全设置
- ASP.NET MVC区域
- linux下面tomcat域名配置
- 2-SAT适定性(Satisfiability)问题知识点详解
- android 自定义xml属性
- iOS开发之普通网络异步请求与文件下载方法
- python中内置的集成开发工具_python应用(3):启用集成开发工具pycharm
- Unity Shader之入门-helloworld
- nginx的指令root和alias的区别
- 从0到1实现Web端H.265播放器:视频解码篇
- qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in问题
- 三步建立自己的电影网站 番外篇 (排除MacCMS10登录故障)
- 周华健机器人演唱会_周华健伦敦花旦演唱会:歌声悠悠流过梦一样人生
- 计算机网络期中考试题周静,zj474~093期中考试反思
- docker语句及SQL查询
热门文章
- 区分多种类型的输入输出
- 为什么直播时要用CDN?
- 【公开课预告】:超低延迟下的实时合唱体验升级
- 【Go API 开发实战 1】该教程所实现的 API 功能
- Oceanus:基于Apache Flink的一站式实时计算平台
- MySQL高可用架构InnoDB Cluster (和NDB Cluster是两码事)
- c++无锁链表的实现
- 真正理解红黑树,真正的
- leetcode 521. 最长特殊序列 Ⅰ(Java)
- 【PAT甲级 StringBuilder的使用】1005 Spell It Right (20 分) Java版 7/7通过