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结束。
相关推荐
老黄编程3 分钟前
--gpu-architecture <arch> (-arch)
linux·人工智能·机器学习
肖爱Kun5 分钟前
LINUX中USB驱动架构—URB请求块
linux·驱动
wanhengidc20 分钟前
云手机在办公领域中自动化的应用
运维·智能手机·自动化
知星小度S3 小时前
系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】
linux·运维·服务器·进程
码农101号7 小时前
运维安全05 - iptables规则保存与恢复
运维·网络·安全
Empty_7777 小时前
SELinux安全上下文
linux·服务器·安全
bug攻城狮8 小时前
解决Ubuntu中apt-get -y安装时弹出交互提示的问题
linux·运维·ubuntu
xiachong278 小时前
ubuntu18.04安装PCL1.14
linux·ubuntu
夜阑珊夭夭8 小时前
linux自定义网卡名字
linux·运维
czhc11400756639 小时前
Linux912 shell:$# $1 $?;RHEL 8 AppStream BaseOS
linux