Shell执行流控制

条件判断语句

test 判断条件是否成立
:
语法:

  • test + 表达式
  • [ 表达式 ] (注意表达式与中括号有空格!)
  • [[ 表达式 ]] (注意表达式与中括号有空格!)
    可以使用man test来查看更多使用方法:
    在这里插入图片描述

test能干什么?

文件类型判断:

判断参数含义
-e判断文件是否存在(任何类型文件)
-f判断文件是否存在并且是一个普通文件
-d判断文件是否存在且是一个目录
-L判断文件是否存在并且是一个软连接文件
-b判断文件是否存在并且是一个块设备文件
-S判断文件是否存在并且是一个套接字文件
-c判断文件是否存在并且是一个字符文件
-p判断文件是否存在并且是一个命名管道文件
-s判断文件是否存在并且是一个非空文件

$?:是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。(0为真,1为假)

判断文件111是否存在:
在这里插入图片描述
判断文件111是否为一个普通文件:
在这里插入图片描述
判断aaa是否为一个目录:

在这里插入图片描述
判断555是否为一个连接文件:
在这里插入图片描述
注意:在判断链接文件时,test并不能判断源文件是否有效!可先判断链接文件是否存在(有效),再判断问价你是否为链接文件。
在这里插入图片描述
判断块设备文件:
在这里插入图片描述

文件权限判断

判断参数含义
-r当前用户是否对其有读权限
-w当前用户对其是否有写权限
-x当前用户对其是否有执行权限
-u当前用户对其是否有suid特殊权限(高级权限冒险位)
-g当前用户对其是否有guid特殊权限(高级权限强制位)
-k当前用户对其是否有o+t特殊权限(高级权限粘滞位)

在这里插入图片描述
o+t权限:文件只能被所有者和超集用户可以删除,系统中/tmp为o+t权限
在这里插入图片描述
在这里插入图片描述
u+s权限:用户对u+s权限文件执行操作时,是以此文件的所有者的身份执行。系统中/usr/bin/passwd文件为u+s权限文件
在这里插入图片描述
在这里插入图片描述

文件新旧判断

注:新旧是指文件的最后修改时间

判断参数含义
file1 -nt file2file1是否比file2新
file1 -ot file2file1是否比file2旧
file1 -ef file2比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

在这里插入图片描述

判断整数

判断参数含义
-eq相等
-ne不相等
-gt大于
-lt小于
-ge大于等于
-le小于等于

在这里插入图片描述

判断字符串

判断参数含义
-z判断是否为空字符串,字符串长度位0
-n判断是否为非空字符串,字符串长度大于0
string1 = string2判断字符串是否相等
string1 != string2判断字符串是否不相等

在这里插入图片描述
在这里插入图片描述

多重条件判断

判断符号含义举例
&& 或 -a逻辑与,全真则真[ -f /etc/passswd -a -f /etc/group] [ -f /etc/passwd ] && [ -f /etc/group ]
|| 或-o逻辑或,全假则假[ -f /etc/passswd -o -f /etc/group ] [ -f /etc/passwd ]

在这里插入图片描述

流程判断语句 if

语法:
if [ 条件 ];then

else

fi

示例:判断用户是否为root用户

在这里插入图片描述
在这里插入图片描述
写法2:
在这里插入图片描述

示例:检测主机名合法性

让用户输入主机名,若用户输入为空,则主机名不合法
在这里插入图片描述
在这里插入图片描述

示例:主机连通性判断
判断当前主机是否能够ping通远程主机
在这里插入图片描述

在这里插入图片描述

示例:进程存在性判断

拓展:pgrep命令
以名称为依据从运行进程队列中查找进程,并显示查找到的进程id

-o显示找到的最小(起始)进程号
-n显示找到的最大(结束)进程号
-l显示进程名称
-P指定父进程号;pgrep -p 4764查看父进程下的子进程ID
-g指定进程组
-t指定开启进程的终端
-u指定进程的有效用户ID

用户输入所要查询的进程,返回是否查询到该进程信息:

在这里插入图片描述
在这里插入图片描述

示例:检测软件是否安装,若没有安装则进行安装

在这里插入图片描述
在这里插入图片描述

循环判断语句

for循环

在这里插入图片描述
语法:

for 定义变量
do 使用变量,执行动作
done 结束标志

示例:计算1~100间的奇数和

在这里插入图片描述
在这里插入图片描述

跳出循环

continue:继续;表示循环体内下面的代码不执行,重新开始下一次循环
break:打断;马上停止执行本次循环,执行循环体后面的代码 exit:表示直接跳出程序

示例:判断所输入的整数是否为质数

while循环

语法:
while 表达式 (表达式为真时进入循环)
do command…
done

示例 : 循环打印数字1~5

在这里插入图片描述
在这里插入图片描述

示例 : 计算1~50的偶数和

在这里插入图片描述
在这里插入图片描述

until循环

语法:
while 表达式 (表达式为真假22时进入循环)
do command…
done
使用时与while循环条件相反即可

循环打印1~5

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值