shell脚本第二阶段-----选择结构

一、条件判断

1.语法格式

格式1:test 条件表达式

格式2:[ 条件表达式 ]

格式3:[[ 条件表达式 ]] 支持正则~

说明:man test 去查看,很多的参数都用来进行条件判断

2.条件判断相关参数

与文件存在与否的判断

bash 复制代码
-e 是否存在     不管是文件还是目录,只要存在,条件就成立
-f 是否为普通文件
-d 是否为目录
-S socket
-p pipe
-c character
-b block
-L 软link

三种语法格式:
test -e file     只要文件存在条件为真
[ -d /shell01/dir1 ] 判断目录是否存在,存在条件为真
[ ! -d /shell01/dir1 ] 判断目录是否存在,不存在条件为真
[[ -f /shell01/1.sh ]] 判断文件是否存在,并且是一个普通的文件

-s 判断文件是否有内容(大小),非空文件条件满足
说明:-s表示非空,! -s 表示空文件
说明:1.sh文件里文件
bash 复制代码
文件权限相关的判断
-r 当前用户对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行
-u 是否有suid
-g 是否sgid
-k 是否有t位

两个文件的比较判断

file1 -nt file2 比较file1是否比file2新
file1 -ot file2 比较file1是否比file2旧
file1 -ef file2 比较是否为同一个文件,或者用于判断硬链接。是否指向同一个inode

test file1 -nt file2
[ file1 -ot file2 ]

整数判断(重要)

bash 复制代码
整数之间的判断

-eq 相等
-ne 不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

字符串判断(重要)

bash 复制代码
-z 是否为空字符串         字符串长度为0,就成立
-n 是否为非空字符串       只要字符串非空,就是成立
string1 = string2        是否相等
string1 != string2       不等

多重条件判断

逻辑与 : -a 或者&&

1 -eq 1 -a 1-ne 1\] 或者\[ 1 -eq 1 \] \&\& \[ 1 -ne 1

逻辑或: -o 或者||

1 -eq 1 -o 1-ne 1\] 或者\[ 1 -eq 1 \] \|\| \[ 1 -ne 1

总结:

1.; && ||这三个都可以用来分割命令

2.;完全不考虑前面的语句是否正确执行,都会执行;号后面的内容

3.&&需要考虑&&前面的语句的正确性,前面语句正确执行才会执行&&后的内容;反之亦然

make && make install

4.|| 需要考虑||前面的语句的非正确性,前面语句执行错误才会执行||后面的内容;反之亦然

5.如果&&和||一起出现,从左往右依次看,按照以上原则


二、流程控制语句

1.基本语法结构

F:false 假

T:true 真

bash 复制代码
if [ condition ];then
 
      command
      command
fi

[ 条件 ] && command
bash 复制代码
if [ condition ];then

        command1
   else
        command2
fi

[ 条件 ] && command1 || command2
bash 复制代码
if [ condition1 ];then
      command1  结束
   elif [condition2 ];then
      command2  结束
   else 
      command3
fi
注释:如果条件1满足,执行命令1结束;如果条件1不满足,再看条件2,如果条件2满足执行命令2后结束;如果条件1和条件2都不满足执行命令3结束。
相关推荐
馨谙15 小时前
vim保姆级使用,操作详解,快捷键大全总结
linux·编辑器·vim
驱动探索者15 小时前
find 命令使用介绍
java·linux·运维·服务器·前端·学习·microsoft
BruceD_16 小时前
新装 CentOS 7 切换 yum 源完整指南
linux·python·docker·centos·yum
洋哥网络科技16 小时前
Centos系统替代选择
linux·运维·centos
礼拜天没时间.16 小时前
VMware安装虚拟机并且部署 CentOS 7 指南
linux·运维·centos·系统安装
de之梦-御风16 小时前
【MediaMTX】centos 7 安装MediaMTX
linux·运维·centos
领创工作室16 小时前
安卓设备分区作用详解-测试机红米K40
android·java·linux
小晶晶京京16 小时前
day54-Zabbix(第三部分)
linux·运维·服务器·zabbix
-dcr17 小时前
22.Nginx 服务器 LNMP项目
运维·服务器·nginx·php·lnmp
---学无止境---17 小时前
linux中ioctl的工作流程以及ethtool是如何获取网络设备信息的
linux