文章目录

  • 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写跑步小实验)相关推荐

  1. Shell编程之条件语句(if语句,case分支语句)

    Shell编程之条件语句 一.条件测试操作 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if语句 单分支结构 双分支结构 多分支结构 三.case分支语句 一.条 ...

  2. Linux网络服务与shell脚本——Shell编程之条件语句

    第八章 Shell编程之条件语句 一.条件测试 1.测试命令 (1)test 条件表达式 (2)[条件表达式] (3)$?:根据返回值判断前者是否成立 2.文件测试:根据指定路径名称,判断对应文件或目 ...

  3. Shell 编程4(退出,测试,判断)

    1 退出状态 定义 在Linux系统中,每当命令执行完成后,系统都会返回一个退出状态.该退出状态用一整数值表示,用于判断命令运行正确与否.退出状态通常保存在预定义变量$?中. 若退出状态值为0,表示命 ...

  4. 你说shell编程的条件语句太难,我说那是你没看过这篇博客。

    文章目录 一.条件测试操作 (一). 条件测试操作 1.test命令 (二).文件测试 1.文件测试基本格式 2.常见的测试操作符 (三).整数测试 1.整数值比较 2.常用的测试操作符 (四).字符 ...

  5. SHELL编程之条件测试

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.条件测试(1) 1.test测试操作 2.字符串比较 3.整数值比较 4.文本状态测试 二.条件测试(2) 1.控制操作 ...

  6. Shell编程之条件语句

    目录 条件测试 条件测试操作-1 条件测试操作-2 条件测试操作-3 条件测试操作-4 条件测试操作-5 条件测试操作-6 条件测试操作-7 if语句的结构 单分支结 双分支结构 case语句结构 条 ...

  7. Shell编程之条件语句(if单分支、双分支、多分支、case多分支)

    文章目录 1.条件测试操作 2.if语句的结构 1.单分支结构 2.双分支语句 3.多分支结构 4.case多分支语句 1.条件测试操作 test命令测试表达式是否成立,若成立返回0,否则返回其他数值 ...

  8. linux条件测试的三种,shell编程之条件测试 | 旺旺知识库

    一.条件测试语法: test 测试内容 [ 测试内容 ]      ##注意中括号与测试内容间有空格 [[ 测试内容 ]] (( 测试内容 ))   ##只能用于测试数值大小,后面详解 前三种测试语法 ...

  9. linux判断搜索结果,shell编程之条件判断和find查询

    使用read 来把输入值分配给一个或多个shell 变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量 所有剩余单词都被分配给最后一个变量 read ...

最新文章

  1. R使用pROC和ggplot2包绘制ROC曲线
  2. python打开excel的函数-Python读取excel文件中带公式的值的实现
  3. 【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
  4. [USACO1.1]坏掉的项链Broken Necklace
  5. 向maven中央仓库提交jar
  6. 配置终端服务连接的安全设置
  7. ASP.NET MVC区域
  8. linux下面tomcat域名配置
  9. 2-SAT适定性(Satisfiability)问题知识点详解
  10. android 自定义xml属性
  11. iOS开发之普通网络异步请求与文件下载方法
  12. python中内置的集成开发工具_python应用(3):启用集成开发工具pycharm
  13. Unity Shader之入门-helloworld
  14. nginx的指令root和alias的区别
  15. 从0到1实现Web端H.265播放器:视频解码篇
  16. qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in问题
  17. 三步建立自己的电影网站 番外篇 (排除MacCMS10登录故障)
  18. 周华健机器人演唱会_周华健伦敦花旦演唱会:歌声悠悠流过梦一样人生
  19. 计算机网络期中考试题周静,zj474~093期中考试反思
  20. docker语句及SQL查询

热门文章

  1. 区分多种类型的输入输出
  2. 为什么直播时要用CDN?
  3. 【公开课预告】:超低延迟下的实时合唱体验升级
  4. 【Go API 开发实战 1】该教程所实现的 API 功能
  5. Oceanus:基于Apache Flink的一站式实时计算平台
  6. MySQL高可用架构InnoDB Cluster (和NDB Cluster是两码事)
  7. c++无锁链表的实现
  8. 真正理解红黑树,真正的
  9. leetcode 521. 最长特殊序列 Ⅰ(Java)
  10. 【PAT甲级 StringBuilder的使用】1005 Spell It Right (20 分) Java版 7/7通过