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结束。
相关推荐
拾心211 天前
【云运维】k8s管理(一)
运维·容器·kubernetes
Acrel-zml1 天前
一键顺控赋能,安科瑞变电站智能运维解决方案
运维·网络·人工智能
Charles_go1 天前
C#中级48、Debug版本和Release版本有什么区别
java·linux·c#
cyber_两只龙宝1 天前
mysql实战项目:keepalived高可用双主架构集群+数据监控(附解析和命令)
linux·运维·mysql·云原生·架构·集群
一起学开源1 天前
实战总结:BACnet/IP 跨网段通讯的两种解决方案(BBMD 与 Foreign Device)
运维·网络·物联网·bacnet·网络协议·tcp/ip
tan180°1 天前
Linux网络TCP(终)(14)
linux·网络·tcp/ip
ALex_zry1 天前
MySQL运维管理技术手册:从监控到自动化实战
运维·mysql·自动化
dyxal1 天前
Vim插件深度探索:打造终极开发环境
linux·编辑器·vim
小雪_Snow1 天前
CentOS 7 安装 docker 教程
linux·docker·centos
凤凰战士芭比Q1 天前
Linux部署基于Django的博客系统
linux·运维·django