20.5 shell脚本中的逻辑判断linux
20.6 if判断文件目录属性shell
20.7 if判断特殊用法bash
20.8/20.9 case判断命令行
20.5 shell脚本中的逻辑判断:input
在shell脚本里,-gt为大于,-lt为小于,-eq为等于,-ne为不等于,-ge为大于等于,it
-le为小于等于基础
~1.格式1:if 条件 ; then 语句; fi变量
#最多见的格式,if(若是怎么怎么样)...;then(而后怎么怎么样)...;fi(与前面的if相对应的)sed
[root@axinlinux-01 shell]# a=5 #假如a=5file
[root@axinlinux-01 shell]# if [ $a -gt 3 ] #命令行下能够分开这样写。假如a大于3的时候
> then #而后
> echo ok #输出ok
> fi #fi 表示结束
ok #回车后就是ok。由于咱们假如a=5了,已经知足上面条件了
[root@axinlinux-01 shell]# if [ $a -gt 3 ]; then echo ok; fi #写完上面的,按上一条命令就显示这个。这就是一整条命令行的写法,输出为ok
ok
#! /bin/bash #在脚本里能够这样写
a=1
if [ $a -gt 3 ]
then
echo ok
fi
~2.格式2:if 条件; then 语句; else 语句; fi
#if(若是怎么样);then(而后怎么样);else(不知足if的判断,怎么样);fi
#! /bin/bash
a=1
if [ $a -gt 3 ]
then
echo ok
else #若是不知足if的逻辑判断,怎么样
echo no #不知足就输出no
fi
~3.格式3:if …; then … ;elif …; then …; else …; fi
#elif 表示在知足if的基础之上,elif还知足什么什么。也就是又加了一个条件判断。能够写屡次
#! /bin/bash
a=5
if [ $a -gt 10 ] #假如a大于10,而后输出>10
then
echo ">10"
elif [ $a -lt 4 ] #假如a小于4,而后输出>10 $$ <4
then
echo "<10 && >4"
else #以上都不知足,就输出no
echo no
fi
以上很明显都不知足,就输出no
~4.逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意处处都是空格
若是咱们就想用<>来表示大于或小于,能够这样写:
[root@axinlinux-01 shell]# a=3
[root@axinlinux-01 shell]# if ((a<5)) ; then echo ok ; fi #就是用两个括号括起来
ok
~5.可使用 && || 结合多个条件
if [ $a -gt 5 ] && [ $a -lt 10 ]; then
#而且关系的时候能够用&&来表示
if [ $b -gt 5 ] || [ $b -lt 3 ]; then
#或者关系的时候能够用||来表示
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.6 if判断文件目录属性:
~1.[ -f file ]判断是不是普通文件,且存在
#! /bin/bash
f=/tmp/axin
if [ -f $f ] #判断$f是不是文件
then #是的话,输出 $f exist
echo $f exist
else #不是的话,touch$f
touch $f
if
~2.[ -d file ] 判断是不是目录,且存在
#! /bin/bash
f=/tmp/axin
if [ -d $f ] #判断$f是否为目录
then #是的话echo $f exist
echo $f exist
else #不是的话mkdir $f
touch $f #无论是文件仍是目录都是能够touch的。若是存在的话touch就会改变他的time
fi
~3.[ -e file ] 判断文件或目录是否存在
~4.[ -r file ] 判断文件是否可读
~5.[ -w file ] 判断文件是否可写
~6.[ -x file ] 判断文件是否可执行
实例:
一般咱们会用到
#! /bin/bash
f=/tmp/axin
[ -f $f ] && rm-rf $f #这一行的效果等同于下面四行的效果(前面的执行成功才执行后面的)
if [-f $f]
then
rm-rf $f
fi
[ -f $f ] || touch $f #这一行的效果等同于下面四行的效果(前面的执行不成功才执行后面的)
if [ ! -f $f] #方括号里加!表明去反的意思
then
touch $f
fi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.7 if判断的特殊用法:
~1.if [ -z "$a" ] 这个表示当变量a的值为空时会怎么样
#若是是变量要用双引号。若是是文件就不用双引号
~2.if [ -n "$a" ] 表示当变量a的值不为空
#若是是变量要用双引号。若是是文件就不用双引号
~3.if grep -q '123' 1.txt; then 表示若是1.txt中含有'123'的行时会怎么样
#-q只作过滤,不显示结果
[root@axinlinux-01 shell]# if grep -wq 'user1' /etc/passwd; then echo "yes"; else echo "no"; fi
no
~4.if [ ! -e file ]; then 表示文件不存在时会怎么样
#-e为是否存在,加上!表明取反,为不存在
~5.if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…
#要想使用大于等于这样的字符,要加上双括号
~6.[ ] 中不能使用<,>,==,!=,>=,<=这样的符号
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.8/20.9 case判断:
~1.格式
case 变量名 in #好比case $a in
value1) #当值为1的时候怎么样
command
;; #双分号表示上面的判断结束进入下面的判断
value2)
command
;;
*) #除此以外又怎么样
command
;;
esac
~2.在case程序中,能够在条件中使用|,表示或的意思, 好比
2|3)
command
;;
~3.脚本案例
需求:当咱们输入一个数字(0-100),判断这个同窗的分数是什么样的级别(优秀、及格或不及格)
#!/bin/bash
read -p "Please input a number: " n #做为与用户交互,用户输入什么,那么那就是什么。首先咱们要捕获这个数字。也一样定义了n这个变量
if [ -z "$n" ] #这个变量为空的时候。也就是用户没有输入的时候
then
echo "Please input a number." #没有输入直接回车了,就输出“请输入一个数字”
exit 1 #而后退出。这个1表示咱们echo $?的值。就是说当客户为空直接回车,再使用echo $?的时候就会显示1
fi
n1=`echo $n|sed 's/[0-9]//g'` #ni=用户输入的匹配出除了数字的东西。假如用户输入了99ww,那么匹配出99,就过滤出了ww
if [ -n "$n1" ] #若是不为空怎么怎么样。(不为空的话确定是带有非法字符啊,由于上一条已通过滤出除数字的了,依上一条就会显示ww)
then
echo "Please input a number." #若是出现除数字的字符,就显示“请输入数字”
exit 1
fi #这一段的意思是过滤数除数字的字符,并显示“Please input a number."
if [ $n -lt 60 ] && [ $n -ge 0 ] #输入的数字小于60而且大于等于0的时候
then
tag=1 #tag1为一个变量,下面咱们会用case来定义它
elif [ $n -ge 60 ] && [ $n -lt 80 ] #输入的数字大于等于60而且小于80的时候
then
tag=2
elif [ $n -ge 80 ] && [ $n -lt 90 ] #输入的数字大于等于80而且小于90的时候
then
tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ] #输入的数字大于等于90而且小于100的时候
then
tag=4
else #以上都不知足的时候
tag=0
fi
case $tag in #咱们来定义tag的值
1) #当tag的值为1的时候,显示"not ok"
echo "not ok"
;;
2) #当tag的值为2的时候,显示"ok"
echo "ok"
;;
3) #当tag的值为3的时候,显示"ok ok"
echo "ok ok"
;;
4) #当tag的值为1的时候,显示"ok ok ok"
echo "ok ok ok"
;;
*) #除此以外的。就是当tag都不符合1 2 3 4 的时候。就是上面定义的tag=0
echo "The number range is 0-100." #接上条,显示"The number range is 0-100."
;;
esac