Linux-------if--for--then---do ----done.循环语句的应用
1.文件测试
文件测试指的是根据特定的路径,判断对应的文件是目录还是文件,或者是否可读、可写、可执行等。
-d:测试是否为目录(Directory)或目录是否存在
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)过文件是否存在
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
执行测试条件之后通过预定义变量$?可以测试命令的返回状态,从而判断是否存存在。
[[email protected] ~]# [ -d /mnt ]
[[email protected] ~]# echo $? //查看前命令返回值
0 //0表示成立非0表示不成立
结合&&和echo命令会更直观的查看结果
[[email protected] ~]# [ -d /mnt ] && echo "ok"
ok //输出ok表示目录已存在
在表达式的后面执行 双&
如果前面的表达式成立则输出YES否则什么都不输出。
2.整数值比较
数值的比较指的是根据给定的两个整数判断第一个数值与第二个数值的关系如是否大于小于第二个数。
数值的比较,常用如下
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
格式是 [ 数值1 操作符 数值2 ]
列式:
[[email protected] ~]# uname=$(who | wc -l) //查看当前已登录用户
[[email protected] ~]# [ $uname -lt 5 ] && echo "xiao yu" //小于5输出xiao yu
xiao yu
3.字符串比较
字符串比较通常用来检查用户输入、系统环境是否满足条件、在提供交互式操作的shell脚本中也可以判断用户输入位置参数是否符合要求,字符串的常用操作如下。
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
!=失取反的意思
列式:
[[email protected] ~]# echo $LANG //查看当前语言环境
en_US.UTF-8
[[email protected] ~]# [ $LANG != "en.US" ] && echo "not en.US" //测试结果(不是en.US)
not en.US
4.逻辑测试
逻辑测试值得是判断两个或多个条件之间的依赖关系,当系统取决于多个条件时,根据这些条件或其中的一个条件成立等情况需要有一个过程,常用的逻辑测试如下所示。
-a或&&:逻辑与,“而且”的意思,只有当前后两个条件都成立时,返回值才为0
-o或||:逻辑或,“或者”的意思,前后两个条件一个成立,返回值才为0
! 逻辑否,指定条件不成立时,返回值才为0
列式:
[[email protected] ~]# uname -r //内核信息
3.10.0-514.el7.x86_64
[[email protected] ~]# mname=$(uname -r | awk -F. '{print $1}') //主版本号
[[email protected] ~]# sname=$(uname -r | awk -F. '{print $2}') //次版本号
[[email protected] ~]# [ $mname -ge 3 ] && [ $sname -gt 4 ] && echo "ok" //测试
ok
if 条件测试操作
在Shell脚本应用中,if语句是最常用的一种流程控制方式,用力啊根据特定的条件测试结果,分别执行不同的操作(如果……那么……)。根据不同的复杂程度,if语句的选择结构可以分为三种基本类型,适用于不同的应用场合。
1.单分支if语句
if语句的:“分支”指的是不同测试结果所对应的执行语句(一条或多条)。对于if但分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
1)单分支if语句语法格式
if
条件测试操作
then
命令序列
fi
语句结构中,条件测试操作可以是“[ 条件表达式 ]”语句,也可以是其他可指定的命令语句,命令序列指的是一条或多条可执行的命令行,也包括嵌套使用的if语句或其他流程控制语句。如果测试结果为0则执行then中的命令序列否则直接到fi结束执行。
可以看出但分支的结构非常简单,条件成立就执行then命令序列,条件不成立则fi结束判断。
列式:
#!/bin/bash
if
[ ! -d /etc/www ] //取反
then
echo "not d chuang jian zhong" //如果 /media/cdrom ,目录不存在则 创建这个目录
mkdir -p /etc/www
fi
[[email protected] cdrom]# sh a.sh //测试
not d chuang jian zhong
[[email protected] cdrom]# cd /etc/www/ //查看
2.多分支if语句
对于多分支的选择结构,要求针对“条件成立”、“条件不成立”两种情况分别执行不同的操作,如果条件成立,则执行then后面的命令序列。如果不成立就执行else后面的命令序列。
1)双分支if语句的语法结构
if
条件测试操作
then
成立执行
else
不成立执行
fi
先通过if进行条件测试。如果条件成立则执行命令序列1如果不成立则进行命令序列2之后fi结束判断。
列式:
[[email protected] www]# vim b.sh
#!/bin/bash
ping -c 3 -i 0.2 -w 3 $1 &&>>/dev/null //测试是否ping通
if
[ $? -eq 0 ] //判断前命令返回值
then
echo " it'up"
else
echo "it down"
fi
[[email protected] www]# sh b.sh 192.168.1.1
it down //表示没有
-c ping包的次数
-i ping包的间隔
-w 超时的时间间隔
3.多分支if语句
由于if语句可以根据测试结果的成立、不成立分别进行操作,所以能够嵌套使用,进行多次判断。
1)多分支if语句语法结构
if
条件测试操作1
then
命令序列1
elif
条件测试操作2
then
命令序列2
else
命令序列3
fi
上诉只嵌套了一个elif语句作为实例,实际上可以嵌套对个。
多分支if语句的执行流程:首先判断条件测试操作1的结果,如果条件1成立,则执行命令序列1 ,然后跳转至fi结束判断,如果条件1不成立,则继续判断条件测试2的结果,如果条件序列2成立则执行命令序列2,然后跳至fi结束判断……如果所有的条件都不满足则执行else后面的命令序列3直到遇到fi。
列式:
[[email protected] www]# vim j.sh
#!/bin/bash
read -p "qing shu ru nin de fen shu(0-100):" dir
if
[ $dir -gt 85 ] && [ $dir -le 100 ]
then
echo "you xiu"
elif
[ $dir -le 85 ] && [ $dir -gt 60 ]
then
echo "he ge"
else
echo " tai low"
fi
[[email protected] www]# sh j.sh
qing shu ru nin de fen shu(0-100):100 //测试·
you xiu
[[email protected] www]# sh j.sh
qing shu ru nin de fen shu(0-100):77 //测试
he ge
[[email protected] www]# sh j.sh
qing shu ru nin de fen shu(0-100):30 //测试
tai low
首先判断是否大于85 小于 100 如果符合则输出优秀并结束判断
如果小于85 并且 大于 60 为优秀 执行then 输出合格
否则 都执行else 其余的都是low
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.使用case分支语句是,几个值得注意的特点
4.case语句应用实例
1)检查用户输入的字符类型
[[email protected] ~]# vim hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "你输入的是字母 $KEY"
;;
[0-9])
echo "你输入的是数字 $KEY"
;;
*)
echo "你输入的是非法字符 $KEY"
esac
[[email protected] sh]# sh hitkey.sh //测试
请输入一个字符,并按Enter键确认:3
你输入的是数字 3
[[email protected] sh]# sh hitkey.sh
请输入一个字符,并按Enter键确认:r
你输入的是字母 r
[[email protected] sh]# sh hitkey.sh
请输入一个字符,并按Enter键确认:%