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结束。
相关推荐
运维有小邓@1 天前
Active Directory服务账户是什么?
运维·服务器·网络
HIT_Weston1 天前
84、【Ubuntu】【Hugo】搭建私人博客:文章目录(三)
linux·运维·ubuntu
moxiaoran57531 天前
使用docker安装myql 8.0
运维·docker·容器
qq_5470261791 天前
Linux 常用快捷键及文本编辑器
linux·运维·服务器
埃伊蟹黄面1 天前
磁盘级文件系统核心原理解析
linux·文件
醇氧1 天前
【Linux】 安装 Azul Zulu JDK
java·linux·运维
一直跑1 天前
查看显卡驱动版本,查看哪个用户使用显卡(GPU)进程
linux·服务器
滴水之功1 天前
Windows远程桌面(非图形化界面)连接Ubuntu22.04
linux
借你耳朵说爱你1 天前
在Linux上挂载磁盘
linux
小成202303202651 天前
Linux高级
linux·开发语言