[ 操作符 文件或目录 ] ‘注意两端空格’
&? 返回0表示条件成立,返回非零值表示条件不成立
&& 逻辑与,"而且"的意思
|| 逻辑或,"或者"的意思
常见的测试操作符 | 解释 |
---|---|
d | 测试是否为目录(directory) |
e | 测试目录或文件是否存在(Exist) |
f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
[root@localhost ~]# touch fff.txt
[root@localhost ~]# test -f fff.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -d fff.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d fff.txt]
[root@localhost ~]# [ -d fff.txt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -f fff.txt ]
[root@localhost ~]# echo $?
0
整数值比较
命令基本格式
[ 整数1 操作符 整数2 ]
常用的测试操作符
操作符 | 作用 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-gt | 大于(Greater Than) |
-lt | 小于(Lesser Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
[root@localhost ~]# [ 5 -eq 3 ]&& echo "yes"
[root@localhost ~]# [ 5 -eq 5 ]&& echo "yes"
yes
[root@localhost ~]# [ 5 -ne 5 ]&& echo "yes"
[root@localhost ~]# [ 5 -ne 6 ]&& echo "yes"
yes
[root@localhost ~]# [ 5 -gt 6 ]&& echo "yes"
[root@localhost ~]# [ 7 -gt 6 ]&& echo "yes"
yes
[root@localhost ~]# [ 7 -lt 6 ]&& echo "yes"
[root@localhost ~]# [ 7 -lt 8 ]&& echo "yes"
yes
[root@localhost ~]# [ 7 -le 8 ]&& echo "yes"
yes
[root@localhost ~]# [ 7 -ge 8 ]&& echo "yes"
[root@localhost ~]# [ 9 -ge 8 ]&& echo "yes"
yes
free -m 查看电脑内存使用情况
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3771 764 2165 45 840 2672
Swap: 3967 0 3967
查看电脑硬盘剩余空间
[root@localhost ~]# free -m | grep "Mem" | awk '{print $4}'
2165
[root@localhost ~]# free -m | grep "Mem" | awk '{print $4}'
2087
[root@localhost ~]# FREECC=$[free -m | grep "Mem" | awk '{print $4}']
-bash: free -m | grep "Mem" | awk '{print }': 语法错误: 无效的算术运算符 (错误符号是 ""Mem" | awk '{print }'")
[root@localhost ~]# FREECC=$(free -m | grep "Mem" | awk '{print $4}') 用圆括号就不报错了
[root@localhost ~]# [ $FREECC -gt 1000 ] &&echo "$FREECC"MB
2087MB
注意括号的选择
常用的格式
格式一:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式二:[ -z 字符串 ]
常用的测试操作符 | 解释 |
---|---|
= | 第一个字符串与第二个字符串内容相同 |
!= | 第一个字符串与第二个字符串内容不同,!号表示相反的意思 |
-z | 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串 |
字符串比较
[root@localhost ~]# [ lisi=zhangsan ] && echo "yes" 字符串要带单引号否则识别不出来
yes
[root@localhost ~]# [ 'lisi' = 'zhangsan' ] && echo "yes"
[root@localhost ~]# [ ! 'lisi' = 'zhangsan' ] && echo "yes"
yes
17
基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...
常用的测试操作符 | 解释 |
---|---|
&& | 逻辑与,“而且”的意思,使用test命令测试时,可将“&&”改为“-a” |
|| | 逻辑或,“或者”的意思,使用test命令测试时,可将“||”改为“-o” |
! | 逻辑否 |
[root@localhost ~]# [ -d /etc ] && [ -r /etc ] &&echo "yes"
yes
[root@localhost ~]# [ -d /etc ] || [ -r /etc ] &&echo "yes"
yes
[root@localhost ~]# [ -f /etc ] || [ -r /etc ] &&echo "yes"
yes
[root@localhost ~]# [ -f /etc ] && [ -r /etc ] &&echo "yes"
单分支结构(基本格式)
if 条件测试操作
then 命令序列
fi
单分支结构(举例)
if cpu占用>80%
then 报警
fi
示例
[@localhost ~]# vim test04.sh
#!/bin/bash
read -p "请输入位置:" file
if [ ! -d $file ];then
mkdir -p $file
fi
[root@localhost ~]# sh test04.sh
请输入位置:/opt/wangwu
[root@localhost ~]# ls /opt/
rh wangwu
双分支结构(基本格式)
if 条件测试操作
then 命令序列1
else 命令序列2
fi
示例
vim test02.sh
#!/bin/bash
read -p "请输入目录位置:" file
if [ -d $file ]
then
echo "目录已存在"
else
mkdir -p $file
fi
[root@localhost ~]# sh test02.sh
请输入目录位置:/etc/lib
[root@localhost ~]# sh test02.sh
请输入目录位置:/opt
目录已存在
多分支结构(基本格式)
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else 命令序列3
fi
示例
判断分数范围,分出优秀、合格、不合格
vim test.sh
#!/bin/bash
read -p "请输入你的分数(0-100),并按ENTER键确认:" grade
if [ $grade -ge 85 ] && [ $grade -le 100 ];
then
echo "优"
elif [ $grade -ge 60 ] && [ $grade -le 84 ];
then
echo "合格"
else [ $grade -ge 0 ] && [ $grade -le 59 ];
echo "不合格"
fi
[root@localhost ~]# sh test.sh
请输入你的分数(0-100),并按ENTER键确认:85
优
[root@localhost ~]# sh test.sh
请输入你的分数(0-100),并按ENTER键确认:65
合格
[root@localhost ~]# sh test.sh
请输入你的分数(0-100),并按ENTER键确认:50
不合格
格式:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*) 默认命令序列
esac
示例
进入十秒,分别进入男子组和女子组赛事
#!/bin/bash
read -p "请输入性别,并按ENTER:" sex
read -p "请输入成绩,并按ENTER:" score
case $sex in
男)
case $score in
[1-9]|10)
echo "你进入男子组"
;;
*)
echo "你没有进入男子组"
esac
;;
女)
case $score in
[1-9]|10)
echo "你进入女子组"
;;
*)
echo "你没有进入女子组"
esac
;;
*)
echo "你输入的性别错误"
esac
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:8
你进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:6
你进入女子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:11
你没有进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:11
你没有进入女子组
*)
echo “你没有进入女子组”
esac
;;
*)
echo “你输入的性别错误”
esac
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:8
你进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:6
你进入女子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:11
你没有进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:11
你没有进入女子组