68.if逻辑判断以及判断文件目录属性 if特殊用法 case判断

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

相关文章
相关标签/搜索