命令基本格式
格式一:test 条件表达式
格式二:[ 条件表达式 ] 两端要有空格
- 文件测试基本格式
[ 操作符 文件或目录 ] 注意两端空格
- 常用的测试操作符
-d:测试是否为目录(directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
&?:返回0表示条件成立,返回非零值表示条件不成立
&&:逻辑与,"而且"的意思
||:逻辑或,"或者"的意思
例如
[root@localhost ~]# test -d 3.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -f 3.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d 3.txt ] &&echo "yes"
[root@localhost ~]#
[root@localhost ~]# [ -f 3.txt ] &&echo "yes"
yes
- 命令基本格式
[ 整数1 操作符 整数2 ]
- 常用的测试操作符
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
[root@localhost ~]# [ 5 -le 6 ]&&echo "yes"
yes
[root@localhost ~]# [ 5 -gt 6 ]&&echo "yes"
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 2827 447 1918 12 462 2139
Swap: 3071 0 3071
[root@localhost ~]# free -m | grep "Mem" |awk '{print $4}'
1917
[root@localhost ~]# freeCC=$(free -m |grep "Mem" |awk '{print $4}')
[root@localhost ~]# echo $freeCC
1917
[root@localhost ~]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 10000 ] && echo "yes"
[root@localhost ~]#
[root@localhost ~]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 100 ] && echo "yes"
yes
- 常用的格式
格式一:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式二:[ -z 字符串 ]
- 常用的测试操作符
=:第一个字符串与第二个字符串内容相同
!=:第一个字符串与第二个字符串内容不同,!号表示相反的意思
-z:检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串
[root@localhost ~]# [ $LANG != "en_US" ] && echo "yes"
yes
[root@localhost ~]# [ $LANG = "en_US" ] && echo "yes"
[root@localhost ~]# vim jj.sh
#!/bin/bash
read -p "请输入目录位置:" MOUNT_DIR
if [ ! -d $MOUNT_DIR ] 判断是否是目录,取反
then
mkdir -p $MOUNT_DIR
fi
[root@localhost ~]# sh jj.sh
- 基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...
- 常用的测试操作符
&&:逻辑与,“而且”的意思,使用test命令测试时,可将“&&”改为“-a”
||:逻辑或,“或者”的意思,使用test命令测试时,可将“||”改为“-o”
!:逻辑否
[root@localhost ~]# [ -d /~/demo ] && echo "yes"
yes
[root@localhost ~]# [ ! -d /~/demo ] && echo "yes"
[root@localhost ~]# [ 1 -eq 1 ] && [ 2 -eq 2 ] && echo "yes"
yes
[root@localhost ~]# [ 1 -eq 1 -a 2 -eq 2 ] && echo "yes" -a和-o也可使用在[]中,更加方便
yes
一元运算符
带一元运算符的表达式遵循从右到左的结合性,常见的一元表达式:++一元表达式,–一元表达式
前缀自增运算符与前缀自减运算符
在一元表达式的前面添加运算符++或–后得到的表达式是一个一元表达式。操作数将被加1(++)或减1(–),表达式的值是经过加1、减1 以后的值。操作数必须是一个左值。
i++: i=$i+1
i=i++:先赋值在运算
i=++i:先自加在赋值
i=–i:先自减在赋值
[root@localhost ~]# i=1
[root@localhost ~]# echo $i
1
[root@localhost ~]# let i=++i
[root@localhost ~]# echo $i
2
[root@localhost ~]# let i+=2 '相当于i=i+2'
[root@localhost ~]# echo $i
4
二元运算符
a + b = c
三元运算符
条件&&结果1 || 结果2
单分支结构(基本格式)
if 条件测试操作
then 命令序列
fi
例如
单分支结构
if 磁盘已用空间>80%
then 报警
fi
exit 1 异常退出
exit 0 正常退出
实例
[root@localhost opt]# vim aa.sh
#!/bin/bash
read -p "请输入目录位置:" file
if
[ ! -d $file ]
then
mkdir -p $file
fi
[root@localhost opt]# sh aa.sh
请输入目录位置:kevin
[root@localhost opt]# ls
30.txt aa.sh httpd-2.4.25 httpd-2.4.25.tar.gz kevin opt opt.zip
双分支结构(基本格式)
if 条件测试操作
then 命令序列1
else 命令序列2
fi
例如
双分支结构
if 80端口是否在监听
then 网站服务已在运行
else 启动httpd服务
fi
实例
[root@localhost opt]# sh bb.sh
#!/bin/bash
read -p "你输入你的分数:" score
if
[ $score -ge 60 ]
then
echo "恭喜通过考试"
else
echo "很遗憾,希望你继续努力"
fi
[root@localhost opt]# sh bb.sh
你输入你的分数:95
恭喜通过考试
[root@localhost opt]# sh bb.sh
你输入你的分数:18
很遗憾,希望你继续努力
多分支结构(基本格式)
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
例如
多分支结构
if 分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
else
判为不合格
fi
实例
[root@localhost opt]# vim score.sh
#!/bin/bash
read -p "请输入你的分数:" score
if
[ $score -ge 80 ] && [ $score -le 100 ];then
echo "成绩优秀"
elif
[ $score -ge 60 ] && [ $score -le 79 ]; then
echo "成绩良好"
else
echo "请找我面批"
fi
[root@localhost opt]# sh score.sh
请输入你的分数:85
成绩优秀
[root@localhost opt]# sh score.sh
请输入你的分数:61
成绩良好
[root@localhost opt]# sh score.sh
请输入你的分数:59
请找我面批
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac
例如
case 分数 in
85~100)
判为优秀
;;
70~84)
判为命令
;;
*)
判为不合格
esac
[root@localhost ~]# vim kevin.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z]) 匹配任意字母
echo "您输入的是字母"
;;
[0-9] 匹配任意数字
echo "您输入的是数字"
;;
*) 匹配任意字符
echo "你输入的是其他字符"
esac
实例
[root@localhost ~]# vim baimi.sh
#!/bin/bash
read -p "请输入的成绩:" sorce
read -p "您的性别是:" sex
case $sex in
female)
case $sorce in
[0-9]|10)
echo "进入决赛"
;;
*)
echo "未进决赛"
esac
;;
male)
case $sorce in
[0-9]|10)
echo "进入决赛"
;;
*)
echo "未进决赛"
esac
;;
esac
[root@localhost ~]# sh baimi.sh
请输入的成绩:9
您的性别是:male
进入决赛