二、shell编程+判断

1.前言

  无论什么编程语言都离不开条件判断(流控)。shell也不例外。

  例如,用户输入的密码不够长时提醒用户,密码过短

  例如,用户输入了备份的目录,如果有目录继续备份,如果没有目录创建目录

  例如,用户输入成绩,如果100-80分评委优秀,如果79-60分评为合格,如果59-0分评为不合格

 

 

2.数值比较

  整数1 操作符 整数2

    操作符

      -gt  大于>

      -lt  小于<

      -eq  等于=

      -ne  不等于≠

      -ge  大于等于>=

      -le  小于等于<=

 

  案例

  猜测用户输入的密码,是否满足长度需求

  变量长度

  echo ${#pass}

  

 

 

  测试语法

  格式1

    test 条件表达式

    

      

  格式2

    [ 空格  条件表达式  空格 ]

    

 

 

  格式3

    [[   条件表达式   ]]

    

 

 

 

  if语法结构

    if  如果

    then  那么

    else  否则

    fi  结束

    

    

 

 

 

3.文件测试  (重要)

  需求用户输入备份的路径,如果存在提示已存在可以备份,如果不存在提示目录不存在请创建。

  -f  当filename存在时返回真

  -b  当filename存在并是块文件时返回真

  -d  当pathname存在并是一个目录时返回真

  -h  当filename存在并是符号链接文件时返回真

  -c  当filename存在并且是字符文件时返回真

  -e  当由pathname指定的文件或目录存在时返回真

  -g  当由pathname指定的文件火目录存在并且设置了SGID位时返回真

  -k  当由pathname指定文件火目录存在并设置了“粘滞”位时返回真

  -p  当filename存在并是命名管道时返回真

  -r  当由pathnname指定的文件或目录存在并且可读时返回真

  -s  当filename存在并且文件大小大于0时返回真

  -S  当filename存在并且时socket时返回真

  -t  当fd是与终端设备相关联的文件描述符时返回真

  -w  当由pathname指定的文件或目录存在并且可写时返回真

  -x  当由pathname指定的文件或目录存在并且可执行时返回真

  -O  当由pathname存在并且被当前程序的有效用户id的用户拥有时返回真(大写字母O)

  -G  当由pathname存在并且属于当前程序的有效用户id的用户的用户组时返回真

 

  -d

  

  

 

   

   -w

  

 

 

 

4.字符串比较

  [  '"字符串" = "字符串"    ]

  =  等于

  ==  等于

  !=  不等于

 

 

  

  

 

  -z  判断字符串长度是0

  -n  判断字符串长度不是0

  

 

 

5.and 和or

  当条件测试比较复杂的时候,需要多个条件同时成立,就需要混合调节测试了。

  逻辑的(and)和(or)

  

  &&  逻辑的and的意思,-a 两个条件同时成立,为真

  ||  逻辑的or的意思,-o 两个条件一个成立,为真 

 

  例子

  猜测用户输入的密码是否满足如下条件:

    1.长度大于等于7位

    2.包含字母大写

    3.包含字母小写

    4.包含符号"@!_"

    

    &&用法

    

 

      这里是-ge 不是gt

 

 

    ||用法

    

 

    

 

 

  

    

 

 

 

 

6.流程控制if——单分支结构

  语法

  if [  条件测试  ]

  then

  符合该条件执行的语句

  fi

 

  例子

  编写脚本,由用户名,如果用户不存在,则创建用户,并设置密码为123456

  

 

   

 

7.流程控制if——双分支结构

  if 条件测试

  then

  命令序列

  else

  命令序列

  fi

 

 

8.流程控制if——多分支结构

  if 条件测试

  then

  命令序列

  elif

  命令序列

  elif

  命令序列

  ....

  else

  命令序列

  fi

 

  例子

  编写脚本,取出系统时间的小时,对数字进行判断

  6-10 this is morning

  11-13 this is noon

  14-18 this is afternoon

  其他 this is  night

  

  date 月 日 时 分

  date 02071300

  

  

 

posted @ 2022-02-05 21:45  真渡  阅读(92)  评论(0)    收藏  举报