博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断
阅读量:6602 次
发布时间:2019-06-24

本文共 3970 字,大约阅读时间需要 13 分钟。

一、shell脚本中的逻辑判断

语法

1、格式1
if 条件 ; then 语句; fi
例:如果a大于3,打印OK

[root@a ~]# vi 2.sh[root@a ~]# bash -v 2.sh #!/bin/basha=5if [ $a -gt 3 ]then      echo okfiok[root@a ~]# bash 2.sh ok[root@a ~]#

2、格式2

if 条件; then 语句; else 语句; fi
例:如果a小于3,则打印no ok

[root@a ~]# bash -v 3.sh #!/bin/basha=2if [ $a -gt 3 ]then      echo okelse     echo no okfino ok[root@a ~]# bash 3.sh no ok[root@a ~]#

3、格式3

if …; then … ;elif …; then …; else …; fi
例:

[root@a ~]# sh -x 4.sh+ a=3+ '[' 3 -gt 4 ']'+ '[' 3 -lt 6 ']'+ echo '<6 && >1'<6 && >1[root@a ~]# sh -v 4.sh#!/bin/basha=3if [ $a -gt 4 ]then      echo ">1"elif [ $a -lt 6 ]then      echo "<6 && >1"else     echo no okfi<6 && >1[root@a ~]#

逻辑判断表达式

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

二、 文件目录属性判断

1、if 判断文件、目录属性

[ -f file ]判断是否是普通文件,且存在
例:如果riven文件不存在,就创建

#!/bin/bashc="/tmp/riven"if [ -f $c ]then    echo $c existelse    touch $cfi

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

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

#!/bin/bashc="/tmp/2018"if [ -d $c ]then    echo $c existelse    touch $cfi

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

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

#!/bin/bashc="/tmp/2018"if [ -e $c ]then    echo $c existelse    touch $cfi

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

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

#!/bin/bashc="/tmp/2018"if [ -r $c ]then    echo $c readableelse    touch $cfi

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

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

#!/bin/bashc="/tmp/2018"if [ -w $c ]then    echo $c writeableelse    touch $cfi

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

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

#!/bin/bashc="/tmp/2018"if [ -x $c ]then    echo $c exeableelse    touch $cfi

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

因为文件不可执行,所有没有任何输出。
2、脚本缩写

#!/bin/bashc="/tmp/2018"[ -f $f ] && rm -f $f#上面的命令等同于下面的命令if [-f $f ]then    rm -f $ffi

#!/bin/bashc="/tmp/2018"[ -f $f ] || touch $f   #如果这个文件不存在就执行后面的文件#上面的命令等同于下面的命令if [ !-f $f ]    #叹号表示取反then    touch $ffi

三、 if特殊用法

1、if [ -z "$a" ]  这个表示当变量a的值为空时会出现错误

#!/bin/bashif [ ! -f /tmp/a1 ]then       echo "/tmp/a1 not exist."             exit n=`wc -l /tmp/a1`if [ -z "$n" ]then     echo error    exitelse    if [ $n -gt 100 ]then    echo okfi

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

if [ -n "$a" ] 表示当变量a的值不为空

[root@a ~]# if [ -n 2.sh ]; then echo ok; fiok[root@a ~]# if [ -n "$a" ]; then echo ok; else echo "a is null";fiok[root@a ~]# if [ -n "$aa" ]; then echo ok; else echo "a is null";fia is null[root@a ~]# if [ -n "$aa" ]; then echo ok; else echo "aa is null";fiaa is null[root@a ~]#

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

[root@a ~]# grep -w 'root' /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[root@a ~]# if grep -w 'root' /etc/passwd; then echo "root exist"; firoot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinroot exist[root@a ~]# if grep -wq 'root' /etc/passwd; then echo "root exist"; fi     #-q不显示过滤内容root exist[root@a ~]# if ! grep -w 'user1' /etc/passwd;then useradd user1;fi   # !取反

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

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

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

四、case判断

1、shell中的case判断

格式:

case  量名 in          value1)         command            ;;                    value2)                    command                    ;;                    *)                    commond                    ;;                    esac

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

2|3)
command
;;
2、脚本案例

#!/bin/bashread -p "Please input a number: " n      #read命令让用户输入字符串,n表示要捕获的变量。if [ -z "$n" ]       then    echo "Please input a number."    exit 1                              fin1=`echo $n|sed 's/[0-9]//g'`    #if [ -n "$n1" ]then echo "Please input a number." exit 1fiif [ $n -lt 60 ] && [ $n -ge 0 ]then    tag=1elif [ $n -ge 60 ] && [ $n -lt 80 ]then    tag=2elif [ $n -ge 80 ]  && [ $n -lt 90 ]then    tag=3elif [ $n -ge 90 ] && [ $n -le 100 ]then    tag=4else     tag=0ficase $tag in    1)    echo "not ok"        ;;    2)        echo "ok"        ;;    3)        echo "ook"        ;;    4)        echo "oook"        ;;    *)        echo "The number range is 0-100."        ;; esac

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

转载于:https://blog.51cto.com/10690709/2145091

你可能感兴趣的文章
系統用戶管理
查看>>
CCIE/CCDE笔试考试政策
查看>>
11.22红帽OpenStack技术研讨会诚邀您免费参加
查看>>
flutter练手DEMO - 网易云音乐(未完成)
查看>>
OC_GCD的基本使用
查看>>
python解释器分类
查看>>
Python知识点总结篇(一)
查看>>
前端的打包工具
查看>>
沈阳一饭店凌晨爆燃,燃气报警器时刻预防
查看>>
Redis 与 数据库处理数据的两种模式
查看>>
python 实现 loadrunner xml脚本格式化
查看>>
项目总结13:Jav文件压缩-InputStream转化为base64-Base64解码并生成图片
查看>>
画图工具之优化篇
查看>>
关于理想团队的构建和对软件流程的理解
查看>>
js日期
查看>>
[Linux命令]zip
查看>>
day3 python简介 IDE选择
查看>>
VUE2中axios的使用方法
查看>>
assert 断言
查看>>
CS 229 notes Supervised Learning
查看>>