shell编程之条件判断与流程控制的笔记

前言

参考视频shell编程之条件判断与流程控制
参考网站菜鸟教程
shell编程的变量笔记shell编程之变量的笔记

一.条件判断式语句

1. 条件判断式语句概述

(1)概述

  • 能够做出判断
  • 根据条件做出相应的操作

(2)判断格式


#第一种,test 命令用于检查某个条件是否成立
test -e /root/install.log

#第二种
[ -e /root/install.log ]

1.方括号内两边都需要有空格 ;注意空格,比如-e /root/install.log ,-e与/root/install.log之间必须有空格
2.一般使用中括号
3. 使用test命令或执行命令,不能加上[]

2.按文件类型判断

(1)文件类型判断图
文件类型判断图

[root@Test ~]# [ -d /root ] && echo "yes" || echo "no"
yes

3.按文件权限判断

(1)文件权限判断图
文件权限判断图

[root@Test ~]# ll
总用量 4
-rw-------. 1 root root 1297 7月  10 20:22 anaconda-ks.cfg
#判断文件是否可读
[root@Test ~]# [ -w ./anaconda-ks.cfg ] && echo "yes" || echo "no"
yes

4.两个文件之间比较

(1)两个文件之间比较图
两个文件之间比较图

#创建一个硬链接
[root@Test ~]# ln anaconda-ks.cfg anaconda-ks.link
#比较两个文件的inode节点
[root@Test ~]# [ ~/anaconda-ks.cfg -ef ~/anaconda-ks.link ] && echo "yes" || echo "no"
yes

nt(new than)、ot(old than)、ef(equal file)

5.两个整数之间比较

(1)两个整数之间比较图
两个整数之间比较图

[root@Test ~]# aa=100
[root@Test ~]# bb=200
#判断两个数的大小
[root@Test ~]# [ $aa -lt $bb ] && echo "yes" || echo "no"
yes

1.eq(equal)、ne(not equal)、gt(greater than)、lt(less than)、ge(greater than or equal)、le(less than or equal)
2.这是用来判断数值型的,如果使用数值判断容易乱,因为shell默认是字符串型,所以在使用的时候小心点

6.字符串的判断

(1)字符串判断图
字符串判断图

[root@Test ~]# a="test"
[root@Test ~]# b=""
[root@Test ~]# [ -z "$b" ] && echo "yes" || echo "no"
yes

#判断字符串相等不建议这么做
[root@Test ~]# [ "$a" = "$b" ] && echo "yes" || echo "no"
no

#判断字符串相等建议这么做
[root@Test ~]# [ "$a" == "$b" ] && echo "yes" || echo "no"
no


[root@Test ~]# aa=100
[root@Test ~]# bb=200

[root@Test ~]# [ $aa -eq $bb ] && echo "yes" || echo "no"
no

#加上双引号就可以当做字符串判断
[root@Test ~]# [ "$aa" == "$bb" ] && echo "yes" || echo "no"
no

1.shell编程的字符串判断相等可以使用“=”,但是不建议那么做,容易产生歧义;
2.注:在判断的时候一定要使用双引号,让它当做字符串来判断
3.以后判断两个变量是否相等,直接使用==号,除非特殊情况,比如写一个计算器

7.多重条件判断

(1)多重条件判断图
多重条件判断图

[root@Test ~]# aa=11
#判断变量aa是否有值,同时判断变量aa是否大于23;因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假
[root@Test ~]# [ -n "$aa" -a $aa -gt 23 ] && echo "yes" || echo "no"
no

8. 学习小脚本实例的好处

  • 掌握语法结构
  • 了解shell的作用
  • 分析编程思想

9. 建立编程思想的方法

  • 熟悉Linux基本命令、规范、语法及shell语法
  • 当遇到实际需求时,应用所学知识

10.如何“背”程序

  • 抄写老师的程序并正确运行
  • 为程序补全注释
  • 删掉注释,为代码重新加注释
  • 看注释写代码
  • 删掉代码和注释,从头开始写

二.单分支if语句

1.单分支if条件语句

#第一种写法
if [ 条件判断式 ];then

fi

#第二种写法
if [ 条件判断式 ]
then

fi
注意点:
	1.if语句使用fi结尾,和一般语言使用大括号结尾不同
	2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
	3.then后面跟符号条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了

2.例子1:判断登录的用户是否为root

#!/bin/bash

#为什么不使用“whoami”,因为它会被欺骗,所以推荐使用env
test=$(env |grep "USER" | cut -d "=" -f 2)

if [ "$test" == "root" ];then

echo "当前登录的用户是:root"

fi
   

3.例子2:判断分区使用率

#!/bin/bash

#获取磁盘使用率
rate=$(df -h |grep "/dev/sda3" |awk '{print $5}'|cut -d "%" -f1)

#判断使用率是否超过80
if [ $rate -gt 80 ];then

echo "/dev/sda3的使用率超过80%了"

fi

三.双分支if条件语句

1.双分支if条件语句格式

if [ 条件判断是式 ]
	then
		command1 
    	command2
    	...
    	commandN
else
	command
fi

2.例1:判断用户输入的是不是目录

#!/bin/bash

read  -t 30 -p  "请输入一个目录:" dir

if [ -d $dir ];then
	echo "输入的是目录"
else
	echo "输入的不是目录"
fi

3.例2:判断apache是否启动

#!/bin/bash
#centos7环境
test=$(ps aux |grep "httpd" | grep -v grep )

if [ -n "$test" ];then
        echo "$(date) httpd is ok"
else
        /usr/sbin/httpd
        echo "$(date) httpd is not ok"
fi

注意:脚本名称不能包含httpd

四.多分支if语句

1.多分支if语句格式

if [ 条件判断是式 ]
	then
		command1 
    	command2
    	...
    	commandN
elif
	then
.....省略更多条件    
else
	command
fi

2.例1:判断数值的范围

#!/bin/bash

num=10 
#num="asds"

#判断num是不是数字
if  [ -n $(echo $num |sed  "s/[0-9]+//g") ];then
        
        echo "不是数字"
        exit 1

fi

#判断数值的范围
if [ $num -gt 100 ];then

        echo "大于100"

elif [ $num -le 100 -a $num -gt 50 ];then
        
        echo "大于50且小于等于100"

elif [ $num -le 50 -a $num -ge 0 ];then
        
        echo "大于等于0且小于等于50"

else
        
        echo “小于0”

fi

五.多分支case语句

1.case语句与if语句的相同点和不同点

case语句和if…elif…else语句一样是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系.

2.case语句的格式

case $变量名 in
	"值1")
	   	执行程序1
	    ;;
	"值2")
	   	执行程序2
	    ;;
	  *)
	  	如果都不匹配成功就执行这里
	  ;;  
esac

注意:每个执行程序后面一定要有“;;”;“*”表示没有匹配到就执行这里

3.例子1:判断用户输入

#!/bin/bash

read -t 30 -p "请输入内容:" input

case $input in
        "yes")
                echo "yes"
                ;;
        "no")
                echo "no"
                ;;
        *)
                echo "没有匹配到"
                ;;
esac

六.for循环语句

1.for语句语法1

for 变量 in 值1 值2 ...
	do
		执行程序
	done
#!/bin/bash

for i in 1 2 3 4 5
        do

                echo $i
        done

2.for语句语法2

for ((初始值;循环控制条件;变量变化))
	do
		执行程序
	done
#!/bin/bash

for((i=1;i<10;i++))

        do
                echo $i
        done

两个括号之间不能有空格

3.例1:批量解压缩文件

#!/bin/bash

cd /root/test/test/

$(ls *.tar.gz > ls.log)

for i in $(cat ls.log)
        do
                tar -zxf $i &>>/dev/null
        done

七.while循环语句和until循环语句

1.while循环语句简介

while循环是不定循环,也称作条件循环,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才停止。这就和for的固定循环不太一样了

2.while循环语句格式

while [ 条件判断式 ]
	do
		执行程序
	done
#!/bin/bash

i=0
while [ $i -le 10 ]
        do
                echo $i
                i=$[$i+1]
        done

注意结束条件,不然会出现死循环

3.until循环语句简介

until循环,和while循环相反,until循环时只要条件判断式不成立就进行循环,并执行循环程序。一旦循环条件成立就终止循环

4.until循环语句格式

until [ 条件判断式 ]
	do
		执行程序
	done	
#!/bin/bash

i=0

until [ $i -gt 10 ]

        do
                echo $i
                i=$[$i+1]
        done

八.break语句和continue语句

1.break语句

#!/bin/bash

i=0
while [ $i -le 10 ]
        do

                echo $i
                i=$[$i+1]
                break
        done

break是用来跳出当前所有循环,break[n]可以指定跳出几层循环

2.continue语句

#!/bin/bash

i=0
while [ $i -le 10 ]
        do

                echo $i
                i=$[$i+1]
                continue
        done

它不会跳出所有循环,仅仅跳出当前循环

九.总结

shell编程更多地考虑程序的功能实现,而不是效率;简化管理员的操作
如果是从其它系统复制过来的内容或shell脚本文件出现莫名其妙的错误时有可能是格式的问题,可以使用dos2unix转换,执行“yum install -y dos2unix”进行安装转换工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值