命令结果判定
&& :在命令执行后如果没有任何报错时会执行符号后面的动作
|| :在命令执行后如果命令有报错会执行符号后的动作
条件判断
# test 语句
# [],[[]],(()) 语句
# [[]] 可以支持的表达式更多,是最常用的语句
判断表达式
文件判断
-a / -e 文件 ##检测文件是否存在
-b 文件 ##检测文件是否存在且为块设备文件,存在则结果为0
-c 文件 ##检测文件是否存在且为字符设备文件,存在则结果为0
-L 文件 ##存在且为链接文件为真
-d 文件 ##文件存在且为目录为真
-f 文件 ##文件存在且为普通文件为真
-S 文件 ##文件存在存在且大小>0为真
-u 文件 ##文件是否设置了SUID权限位,设置了SUID则结果为0
-r 文件 ##文件存在且可读为真
-w 文件 ##文件存在且可写为真
-x 文件 ##文件存在且可执行为真f1 -nt f2 -nt为newer than ##文件f1比f2新为真
f1 -ot f2 -ot为older than ##文件f1比f2旧为真
f1 -ef f2 -ef为等于 ##文件是否在相同的设备有相同的节点号
# cd /mnt/
-a 判断文件是否存在
-d 判断文件类型
-S 判断文件是否存在,且不为空
-x 判断文件权限,是否可以执行
-ot 判断文件新旧
# [ "lee" -ot "lee1" ] && echo yes || echo no
-ef 判断节点号是否相同
节点号不同运行结果:
# rm -fr test
# ln lee test 【创建硬链接】
# ls -i lee test 查看节点号
# [ "/mnt/lee" -ef "/mnt/test" ] && echo yes || echo no
字符串测试表达式
检测变量是否为空
# a=lee
比较字符
# b=test
整数测试表达式
判断相等
# a=1 ; b=1
对比大小
逻辑操作符
练习:判断输入字符,输入空报错,输入exit退出,判断是否为文件或目录
# vim file.sh 【配置文件】
#!/bin/bash
ACTIO()
{
read -p "输入字符: " target
#退出
[ "$target" = "exit" ] && {
echo bye
exit 0
}
# 1. 检测变量是否为空
[ -z "$target" ] && {
echo "错误:变量不能为空"
target
}
# 2. 检测文件/目录是否存在
[ -e "$target" ] || {
echo "错误,目录不存在"
target
}
# 3. 判定是否是文件
[ -f "$target" ] && {
echo "是个文件"
target
}
# 4. 判定是否是目录
[ -d "$target" ] && {
echo "是一个目录"
target
}
}
ACTIO 【最后要运行函数】
# bash file.sh 【sh不能运行时,bash可以运行脚本】
练习:猜数字判定
#!/bin/bash
NUM()
{ NUM=$[RANDOM%10] } 【设置随机数0~9】
GAUSE()
{
read -p "输入数字0~9:" sum
# 1,检测变量是否为空
[ -z "$sum" ] && { 【判断输入是否为空】
echo "错误:输入不能为空"
GAUSE
}
#2,检测输入
(( $sum > 10 || $sum < 0 )) && { 【判断输入是否在范围内】
echo "必须是0~9:"
echo $NUM
GAUSE
}
#3,循环运行
[ "$sum" -eq "$NUM" ] && { 【判断是否猜对,没猜对会退出】
echo "猜对了"
read -p "是否继续:(y/n)" AAA
[ "$AAA" = "y" ] && {
NUM
GAUSE
}||{
echo bye
exit
}
}
}
NUM
GAUSE