文章目录
条件判断语句
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 file2 | file1是否比file2新 |
file1 -ot file2 | file1是否比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