dtcms 模板下载 dtcms文档 Scala SLAM haskell awk jtable Modernizr vue官方下载 it教学视频 jquery each python查看数据类型 当前线程等待5秒 hbase端口 oracle添加索引 windows杀进程命令 css鼠标悬浮样式 python命令 java重写和重载的区别 java开发环境安装 java基础编程 java字符串格式化 局域网助手 asp建站系统 alphacam lol设置 winhex使用教程 只狼脚本 qq免安装 福昕阅读器绿色版 dnf刷什么图赚钱 8元秒电脑 王者荣耀自动刷冒险 极限防守图 松下plc编程软件 lrc软件 字典生成器 winsxs可以删除吗 b450 卸载mysql
当前位置: 首页 > 学习教程  > 编程语言

shell脚本——shell编程之条件语句(使用[ ]+if语句详解)

2020/11/4 14:28:05 文章标签:

这里写目录标题前言一、条件测试1.1 文件测试1.1.1 test命令1.1.2 文件测试1.2 整数测试1.3 字符串与逻辑测试1.3.1 字符串比较1.3.2 逻辑测试1.3.3 一元运算符,二元运算符和三元运算符二、if语句2.1 if单分支语句2.2 if双分支语句2.3 if多分支语句前言 在简单的sh…

这里写目录标题

  • 前言
  • 一、条件测试
    • 1.1 文件测试
      • 1.1.1 test命令
      • 1.1.2 文件测试
    • 1.2 整数测试
    • 1.3 字符串与逻辑测试
      • 1.3.1 字符串比较
      • 1.3.2 逻辑测试
      • 1.3.3 一元运算符,二元运算符和三元运算符
  • 二、if语句
    • 2.1 if单分支语句
    • 2.2 if双分支语句
    • 2.3 if多分支语句

前言

  • 在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程。
  • 但是,单一的顺序结构使得脚本过于机械化,不够“智能”,难以处理更加领过的系统任务。

一、条件测试

1.1 文件测试

1.1.1 test命令

  • test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
命令基本格式
格式一:test 条件表达式
格式二:[ 条件表达式 ]		'两端要有空格,此法更为常用'

1.1.2 文件测试

文件测试基本格式
[ 操作符 文件或目录 ]  '注意两端空格'

&?  返回0表示条件成立,返回非零值表示条件不成立
&&  逻辑与,"而且"的意思
||  逻辑或,"或者"的意思
常见的测试操作符解释
-d测试是否为目录(directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
[root@localhost opt]# cd aaa
[root@localhost aaa]# ls
[root@localhost aaa]# mkdir ccc
[root@localhost aaa]# ls
ccc
[root@localhost aaa]# test -d ccc
[root@localhost aaa]# echo $?
0
[root@localhost aaa]# test -f ccc
[root@localhost aaa]# echo $?
1
[root@localhost aaa]# touch bbb.txt
[root@localhost aaa]# ls
bbb.txt  ccc
[root@localhost aaa]# test -f bbb.txt 
[root@localhost aaa]# echo $?
0
[root@localhost aaa]# [ -d ccc ]
[root@localhost aaa]# echo $?
0
[root@localhost aaa]# [ -x ccc ]
[root@localhost aaa]# echo $?
0
[root@localhost aaa]# ls -l
total 0
-rw-r--r--. 1 root root 0 Nov 26 15:18 bbb.txt
drwxr-xr-x. 2 root root 6 Nov 26 15:17 ccc
[root@localhost aaa]# useradd lisi
[root@localhost ~]# echo "123123" | passwd --stdin lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# su - lisi
最后一次失败的登录:二 1126 15:28:39 CST 2019pts/0 上
最有一次成功登录后有 1 次失败的登录尝试。
[lisi@localhost aaa]$ [ -w ccc ]
[lisi@localhost aaa]$ echo $?
1
[lisi@localhost aaa]$ [ -r ccc ]
[lisi@localhost aaa]$ echo $?
0


[lisi@localhost aaa]$ [ -r ccc ] && echo "yes"
yes
[lisi@localhost aaa]$ [ -w ccc ] && echo "yes"
[lisi@localhost aaa]$ 
[lisi@localhost aaa]$ [ -w ccc ] || echo "yes"
yes

1.2 整数测试

  • 整数值比较
命令基本格式
[ 整数1 操作符 整数2 ]		
  • 常用的测试操作符
操作符解释
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)
[lisi@localhost aaa]$ [ 5 -gt 3 ] && echo "yes"
yes
[lisi@localhost aaa]$ [ 5 -gt 6 ] && echo "yes"
[lisi@localhost aaa]$ [ 5 -le 6 ] && echo "yes"
yes
[lisi@localhost aaa]$ [ 5 -le 3 ] && echo "yes"
[lisi@localhost aaa]$ 
[root@localhost opt]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1823         692          82           9        1048         908
Swap:          4095           0        4095
[root@localhost opt]# free -m | grep "Mem" | awk '{print $4}'
82
[root@localhost opt]# ddd=$(free -m | grep "Mem" | awk '{print $4}')
[root@localhost opt]# echo $ddd
84
[root@localhost opt]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 100 ] && echo "yes"
[root@localhost opt]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 80 ] && echo "yes"
yes

1.3 字符串与逻辑测试

1.3.1 字符串比较

  • 常用的格式
格式一:[ 字符串1 = 字符串2 ]
	   [ 字符串1= 字符串2 ]
格式二:[ -z 字符串 ]
常用的测试操作符解释
=第一个字符串与第二个字符串内容相同
!=第一个字符串与第二个字符串内容不同,!号表示相反的意思
-z检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串
[root@localhost opt]# [ $LANG != "en_US" ] && echo "yes"
yes
[root@localhost opt]# [ $LANG = "en_US" ] && echo "yes"
[root@localhost opt]# [ "男" = "男" ] && echo "yes"
yes
[root@localhost opt]# [ "男" != "男" ] && echo "yes"
[root@localhost opt]# [ "男" != "女" ] && echo "yes"
yes
[root@localhost opt]# [ "男" = "女" ] && echo "yes"
[root@localhost opt]# 


[root@localhost opt]# vim 33.sh
#!/bin/bash
read -p "是否创建/opt/share目录:(yes/no)" ack
[ $ack = yes ] && mkdir /opt/share
echo "创建成功"
[root@localhost opt]# ./33.sh 
是否创建/opt/share目录:(yes/no)yes
创建成功
[root@localhost opt]# ls
33.sh    rh  share  
[root@localhost opt]# vim 44.sh
#!/bin/bash
[ -d /opt/demo ] && echo "已经存在" || mkdir /opt/demo && echo "创建成功"
[root@localhost opt]# ./44.sh 
创建成功
[root@localhost opt]# ls
33.sh    rh  share  44.sh demo

1.3.2 逻辑测试

基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...
常用的测试操作符解释
&&逻辑与,“而且”的意思,使用test命令测试时,可将“&&”改为“-a”
逻辑否
[root@localhost opt]# [ -d /opt/demo ] && echo "yes"
yes
[root@localhost opt]# [ ! -d /opt/demo ] && echo "yes"
[root@localhost opt]# [ 1 -eq 1 ] && [ 2 -eq 2 ] && echo "yes"
yes
[root@localhost opt]# [ 1 -eq 1 -a 2 -eq 2 ] && echo "yes"		'-a和-o也可使用在[]中,更加方便'
yes

1.3.3 一元运算符,二元运算符和三元运算符

  • 一元运算符
    • 带一元运算符的表达式遵循从右到左的结合性,常见的一元表达式:++一元表达式,–一元表达式
    • 前缀自增运算符与前缀自减运算符
  • 在一元表达式的前面添加运算符++或–后得到的表达式是一个一元表达式。操作数将被加1(++)或减1(–),表达式的值是经过加1、减1 以后的值。操作数必须是一个左值
i=1;
i++: i=$i+1
i=i++:先赋值在运算
i=++i:先自加在赋值
i=–i:先自减在赋值
[root@localhost opt]# i=1
[root@localhost opt]# echo $i
1
[root@localhost opt]# let i=++i
[root@localhost opt]# echo $i
2
[root@localhost opt]# let i+=2 	'相当于i=i+2'
[root@localhost opt]# echo $i
4
  • 二元运算符
    • a + b = c
  • 三元运算符
    • 条件&&结果1 || 结果2

二、if语句

2.1 if单分支语句

单分支结构(基本格式)
if 条件测试操作
	then  命令序列
fi


单分支结构(举例)
if 磁盘已用空间>80%
	then  报警
fi

单分支

[root@localhost opt]# vim eee.sh

#!/bin/bash
dir "/opt/demo02"
if [ ! -d $dir ]	'若不存在/opt/demo2,则执行下述命令'
 then
        mkdir -p $dir
        echo "$dir创建成功"
fi
[root@localhost opt]# chmod +x eee.sh 
[root@localhost opt]# ./eee.sh 
/opt/demo02创建成功

2.2 if双分支语句

双分支结构(基本格式)
if 条件测试操作
	then  命令序列1
	else  命令序列2
fi


双分支结构(举例)
if 80端口是否在监听
	then  网站服务已在运行
	else  启动httpd服务
fi

双分支

举例1[root@localhost opt]# vim eee.sh
#!/bin/bash
dir="/opt/demo02"
if [ ! -d $dir ]
 then
        mkdir -p $dir
        echo "$dir创建成功"
  else
        echo "$dir已存在"
fi
[root@localhost opt]# ./eee.sh 
/opt/demo02已存在


举例2:查看目标主机是否存活,显示检测结果
[root@localhost opt]# vim fff.sh
#!/bin/bash
read -p "请输入IP地址:" addr
ping -c 3 -i 0.2 -W 3 $addr &> /dev/null
if [ $? -eq 0 ]
        then
                echo "$addr is up"
        else
                echo "$addr is down"
fi
[root@localhost opt]# chmod +x fff.sh 
[root@localhost opt]# ./fff.sh 
请输入IP地址:192.168.100.1      
192.168.100.1 is down
[root@localhost opt]# ./fff.sh 
请输入IP地址:192.168.197.1
192.168.197.1 is up
其中:
-c:发送三个包
-i: 发包间隔0.2-W:等待时间3

2.3 if多分支语句

多分支结构(基本格式)
if 条件测试操作1
	then  命令序列1
elif  条件测试操作2
	then  命令序列2
else
	命令序列3
fi


多分支结构(举例)
if 分数为85~100之间
	then  判为优秀
elif  分数为70~84之间
	then  判为合格
else
	判为不合格
fi

多分支

举例:判断分数范围,分数优秀,合格,不合格三挡
[root@localhost opt]# vim ggg.sh
#!/bin/bash
read -p "请输入成绩:" score
if [ $score -lt 0 ] || [ $score -gt 100 ]
  then
        echo "输入有误"
        exit 1;
elif [ $score -ge 85 ] && [ $score -le 100 ]
  then
        echo "成绩优秀"
elif [ $score -ge 70 ] && [ $score -le 84 ]
  then
        echo "成绩合格"
else
        echo "成绩不合格"
fi

[root@localhost opt]# ./ggg.sh 
请输入成绩:100
成绩优秀
[root@localhost opt]# ./ggg.sh 
请输入成绩:82
成绩合格
[root@localhost opt]# ./ggg.sh 
请输入成绩:53  
成绩不合格
[root@localhost opt]# ./ggg.sh 
请输入成绩:111
输入有误
[root@localhost opt]# ./ggg.sh 
请输入成绩:-23
输入有误

本文链接: http://www.dtmao.cc/news_show_350154.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?