六十八、shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一、shell脚本中的逻辑判断

格式1:if 条件 ; then 语句; fi

格式2:if 条件; then 语句; else 语句; fi

格式3:if …; then … ;elif …; then …; else …; fi

if:如果。

then:然后。

-gt:大于。

-lt:小于。

-eq:等于。

-ne:不等于。noeq。

-ge:大于等于。

-le:小于等于。

格式1:如果满足条件a大于3,则输出ok。最常用。

# if [ $a -gt 3 ]; then echo ok; fi    //这是用一行命令表示下方脚本

#!/bin/bash
a=5
if [ $a -gt 3 ]
then
   echo ok
fi
# sh -x if1.sh        //执行过程:5和3比较,大于3,输出ok。
+ a=5
+ '[' 5 -gt 3 ']'
+ echo ok
ok

格式2:若不满足条件不大于3,则输出nook

#!/bin/bash
a=5
if [ $a -gt 3 ]
then
   echo ok
else
   echo nook
fi
# sh -x if2.sh 
+ a=2
+ '[' 2 -gt 3 ']'
+ echo nook
nook

格式3:不满足第一个条件,但是满足第二个条件。

#!/bin/bash
a=2
if [ $a -gt 4 ]
then
   echo ">1"
elif [ $a -lt 3 ]
then
   echo "<3 && >4"
else
   echo nook
fi
# sh -x if3.sh 
+ a=2
+ '[' 2 -gt 4 ']'
+ '[' 2 -lt 3 ']'
+ echo '<3 && >4'
<3 && >4

逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格

可以使用 && ,|| 结合多个条件。

&&:并且。

||:或者。

if [ $a -gt 5 ] && [ $a -lt 10 ]; then

if [ $b -gt 5 ] || [ $b -lt 3 ]; then

二、文件目录属性判断

[ -f file ]判断是否是普通文件,是否存在

[ -d file ] 判断是否是目录,是否存在

[ -e file ] 判断文件或目录是否存在

[ -r file ] 判断文件是否可读

[ -w file ] 判断文件是否可写

[ -x file ] 判断文件是否可执行

#!/bin/bash
f="/tmp/aminglinux"
if [ -f $f ]
then
    echo $f exist
else
    touch $f
fi

# sh -x  file.sh    //第一次判断,没有这个文件,会创建这个文件

+ f=/tmp/aminglinux
+ '[' -f /tmp/aminglinux ']'
+ touch /tmp/aminglinux

# sh -x  file.sh        //第二次判断,有这个文件,直接输出这个文件

+ f=/tmp/aminglinux
+ '[' -f /tmp/aminglinux ']'
+ echo /tmp/aminglinux exist
/tmp/aminglinux exist
#!/bin/bash
f="/tmp/aminglinux"
[ -f /tmp/aminglinux ] && rm -f $f
判断前面的文件是否存在,如果存在,就删除它。
if [ -f $f ]
then
rm -f $f
fi

[ -f /tmp/aminglinux ] && rm -f $f  //这一句等于上面四句。

[ -f $f ]  || touch $f    //当前面的命令执行不成功时,才执行后面的命令。等同于下面的四句。! -f 取反。当这个文件不存在,就touch。

if [ ! -f $f ]

then

touch $f

fi

三、if特殊用法

if [ -z "$a" ]  这个表示当变量a的值为空时会怎么样

if [ -n "$a" ] 表示当变量a的值不为空,不为空,条件成立。

! -z = -n

! -n = -z       它们的关系是相对的

使用-z和-n判断时,变量用双引号括起来,文件就不用。

使用该用法时,后面就不要用elif了,没有意义,应该用else。

#!/bin/bash
n='/tmp/lala'
if [ -z "$n" ]
then
echo no
exit
else
echo "12345" >> "/tmp/lala"
fi

如果用elif像下面这样写,就不对,因为前面是文件,后面用elif就只能和数字对比做判断,因为文件和数字不能对比,所以会报错,直接用else,然后touch文件或者追加什么的:

# if [ -n /tmp/lala ];then echo okk; fi

#!/bin/bash
n='/tmp/lala'
if [ -z "$n" ]
then
echo no
exit
elif [ $n -gt 10 ]
then
echo yes
fi

if grep -q '123' 1.txt; then  表示如果1.txt中含有'123'的行时会怎么样

-w:更加精准的匹配。

-q:过滤,但是不把过滤的内容显示出来。

# if grep -wq 'user1' /etc/passwd; then echo "user1 exist"; fi

if [ ! -e file ]; then 表示文件不存在时会怎么样

!:取反,感叹号。

if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…

[ ] 中不能使用<,>,==,!=,>=,<=这样的符号

四、case判断

格式 case  变量名($a) in

value1)

command

;;

value2)

command

;;

*)

commond

;;

esac

在case程序中,可以在条件中使用|,表示或的意思, 比如

value2|value3)

command

;;

每个判断里面以双分号结束,代表判断结束,进入下一个判断。

当执行status时,会执行它下面的语句,当执行restart或者reload或者force-reload时,会执行它下面的语句,当执行其他的命令时,执行“*”下面的语句。

# read -p "Please input a number: " n     read -p的作用:比如给n赋值,输入什么就是什么。

Please input a number: 12345

# echo $n

12345

shell脚本案例:

#!/bin/bash
read -p "Please input a number: " n
if [ -z "$n" ]
then
echo "Please input a number."
exit 1     //退出来,返回一个数值
fi
n1=`echo $n|sed 's/[0-9]//g'`        判断输入的变量是不是纯数字
if [ -n "$n1" ]
then
echo "Please input a number."      输入一个纯数字
exit 1                                              再退出来
fi
if [ $n -lt 60 ] && [ $n -ge 0 ]           $n小于60并且大于等于0
then
tag=1        先用tag=1做标记
elif [ $n -ge 60 ] && [ $n -lt 80 ]          $n大于60小于80用tag=2标记
then
tag=2
elif [ $n -ge 80 ]  && [ $n -lt 90 ]          $n大于等于80并且小于90用tag=3标记
then
tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ]        $n大于等于90并且小于等于100用tag=4表示
then
tag=4
else                 不是这些情况的tag=0
tag=0
fi
case $tag in
1)
echo "not ok"
;;
2)
echo "ok"
;;
3)
echo "ook"
;;
4)
echo "oook"
;;
*)
echo "The number range is 0-100."
;;
esac

测试1:

# sh -x case.sh
+ read -p 'Please input a number: ' n
Please input a number: 101
+ '[' -z 101 ']'        //先判断这个变量是不是存在
++ echo 101
++ sed 's/[0-9]//g'            //存在之后,做一个判断,把数字清空,然后n1为空
+ n1=
+ '[' -n '' ']'                         //判断它是否不为空,不为空就正常,然后往下走,一个个比对判断。
+ '[' 101 -lt 60 ']'
+ '[' 101 -ge 60 ']'
+ '[' 101 -lt 80 ']'
+ '[' 101 -ge 80 ']'
+ '[' 101 -lt 90 ']'
+ '[' 101 -ge 90 ']'
+ '[' 101 -le 100 ']'
+ tag=0                         //所有条件都不满足,最后tag=0
+ case $tag in                //tag=0没有在1234里面的时候,就返回*号的输出。
+ echo 'The number range is 0-100.'
The number range is 0-100.

测试2:

# sh -x case.sh
+ read -p 'Please input a number: ' n
Please input a number: 65
+ '[' -z 65 ']'
++ echo 65
++ sed 's/[0-9]//g'
+ n1=
+ '[' -n '' ']'
+ '[' 65 -lt 60 ']'
+ '[' 65 -ge 60 ']'
+ '[' 65 -lt 80 ']'
+ tag=2
+ case $tag in                   //大于60并且小于80,直接判定tag=2
+ echo ok
ok

原文地址:http://blog.51cto.com/13576245/2124287

时间: 2024-10-10 05:57:39

六十八、shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断的相关文章

shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断

一.shell脚本中的逻辑判断在shell脚本中,很多都会逻辑判断,判断某一个数值,判断某一个文件,或者某一个目录,我们针对判断结果再做一些操作,如果没有判断,就没法做一些操作格式1:if条件:then语句:fi例子:[[email protected] ~]# if [ $a -ge 3 ] //分行写就是这样写 thenecho okfiok[[email protected] ~]# if [ $a -ge 3 ]; then echo ok; fi //这是一行写的格式//解释:-gt表

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

shell脚本中的逻辑判断

shell脚本中的逻辑判断 if 逻辑判断.在shell中if判断的基本语法为: 1)不带else if 判断语句; then command fi 例如: [[email protected] sbin]# cat if1.sh #! /bin/bash read -p "Please input your score: " a if (($a<60)); then echo "You didn't pass the exam." fi 在if1.sh中出现

shell脚本中的逻辑判断,文件目录属性判断,if特殊用法,case语句

笔记内容: 20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断 笔记日期:2017-11-22 20.5 shell脚本中的逻辑判断 在所有的编程语言中都会有if语句来进行逻辑判断,所以在shell中也不例外. Shell的if语句的判断条件和其他编程语言一样写在if关键字的那一行,但是需要使用方括号括起来,并且变量和逻辑运算符以及方括号都要用空格隔开,这一点和其他的编程语言不一样,整个if语句块以fi关键字表示结尾,the

20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断

- 20.5 shell脚本中的逻辑判断 - 20.6 文件目录属性判断 - 20.7 if特殊用法 - 20.8/20.9 case判断 # 20.5 Shell脚本中的逻辑判断 - 很多脚本可以直接用命令执行,比如之前的那个 ``` [[email protected] ~]# for i in `seq 1 5`;do echo $i;done 1 2 3 4 5 [[email protected] ~]# for i in `seq 1 5` > do > echo $i > 

shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell脚本中的逻辑判断 语法1.格式1if 条件 ; then 语句; fi例:如果a大于3,打印OK [[email protected] ~]# vi 2.sh [[email protected] ~]# bash -v 2.sh #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi ok [[email protected] ~]# bash 2.sh ok [[email protected] ~]# 2.格式2if 条件; then

Shell脚本中的逻辑判断、文件目录属性判断、if的特殊用法、case判断

1.Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi格式2:if 条件; then 语句; else 语句; fi格式3:if -; then - ;elif -; then -; else -; fi逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格可以使用 &

shell脚本中的逻辑判断、文件目录属性判断、 if特殊用法、case判断

shell脚本中的逻辑判断 shell脚本中很多都是逻辑判断,判断某个数值,判断某一个文件,或者某个目录,最后真对判断的某个结果再去做一些操作,在shll脚本中到处都是逻辑判断,如果没有判断就没有办法去做一些操作,不然只能敲命令了, shell中逻辑判断的语法 最常见的语法 :if 条件 ; then 语句; fi 他的格式比较特殊if和fi是相对的,正好对应的,then是if怎么样然后怎么样,这个语法读起来是如果怎么样然后怎么样 如果a的值大于3软后怎么样 [[email protected]

69.shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell中的逻辑判断 格式1:if 条件 ; then 语句; fi a=2 if [ $a -ge 2 ]; then echo ">=2"; fi 格式2:if 条件; then 语句; else 语句; fi a=1 if [ $a -ge 2 ]; then echo ">=2"; else echo "<2"; fi 格式3:if -; then - ;elif -; then -; else -; fi a=6