Liunx shell编程及自动化运维实现--第一章判断

一、Shell条件测试

1.数值比较[整数1  操作符  整数2]

操作符

-gt 大于
-lt 小于
-eq 等于
-ne 不等于
-ge 大于等于
-le 小于等于

echo  ${#pass}        变量长度

测试语法  必须有空格

        1.test条件表达式        test 2 -ge 7 | echo $?

        2.[条件表达式]           [ 2 -ge 7  ] | echo $?

        3.[[条件表达式]]         [[  2 -ge 7  ]]  | echo $?

if语法结构

        if  如果

        then  那么

        else   否则

        fi  结束

实例

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

2.脚本

vim   pass.sh

read  -p  "请输入您的密码,是否满足长度“  ps

if  [  ${#ps}   -lt    7  ]

then

echo "您的密码太短"

else

echo "您的密码太长"

fi

3,测试  bash  pass.sh

2.文件测试[操作符  文件或目录]

操作符

-f filename 当filename 存在时返回真
-b  filename 当filename存在并且是块文件时返回真(返回0)
-d pathname 当pathname存在并且是一个目录时返回真
-h filename 当filename存在并且是符号链接文件时返回真 或  - Lfilename
-c filename 当filename存在并且是字符文件时返回真
-e pathname 当由pathname指定的文件或目录存在时返回真
-g pathname 当由pathname指定的文件或目录存在并且设置了SGID 位时返回真:
-k pathname 当由pathname指定的文件或目录存在并且设置了粘滞位时返回真
-p filename 当filename存在并且是命名管道时返回真
-r pathname 当由pathname 指定的文件或目录存在并且可读时返回真
-s filename 当filename存在并目文件大小大于0时返回真
-S filename 当filename存在并且是socket时返回真
-t  fd 当fd 是与终端设备相关联的文件描述符时返回真
-W pathname 当由pathname 指定的文件或目录存在并且可写时返回真
-X  pathname 当由pathname指定的文件或目录存在并日可执行时返回真
-O pathname 当由pathname存在并且被当前进程的有效用户id的用户拥有时返回真(字母O大写)
-G pathname 当由pathname 存在并且属于当前进程的有效用户id 的用户的用户组时返回真

实例

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

2.脚本

vim   path.sh

#!/bin/bash

read  -p  "请输入您要备份的目录:"  dir1

if  [  -d  $dir1  ]

then  echo  "$dir1存在可以备份"

else  echo  "$dir1不存在不可以备份"

fi

或  test  -d  /abc  ; echo  $?

3.测试

chmod  +x  /path.sh

bash   path.sh

3.字符串比较[“字符串”=“字符串”]

3.1 =  等于

需求:邀请用户确认,yes升级装备,no不升级装备

脚本:

read  -p  "您确定要升级这件装备吗?"  select

if  [  "$select" = "yes"  ]        必须有双引号

then  echo  "装备升级开始。。”

else  echo  "感谢您欢迎下次光临”

fi

3.2  !=  不等于

read  -p  "您确定要升级这件装备吗?"  select

if  [  "$select" != "yes"  ]        必须有双引号

then  echo  "感谢您欢迎下次光临”

else  echo  "装备升级开始。。”

fi

3.3  -z   -n

-z  判断字符长度是否为0

bbb=""

echo ${#bbb}  |  echo $?

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

[  -n  "$bbb"  ]   ;  echo  $? 

4.and和or

当条件测试比较复杂时,需要多个条件同时成立,就需要混合测试——>and和or

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

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

需求:用户输入的密码必须满足以下条件

        1.长度大于等于7

        2.包含小写字母

        3.包含大写

        4.包含符号“@_!

read  -p  "请您输入密码:"  pass

if  [  ${#pass} -ge  7 ]    &&    [[  ${pass} =~  [a-z]   ]]  &&  [[  ${pass} =~  [A-Z]  ]] &&  [[  ${pass} =~  [@_!]  ]]

then  echo  "sucess”

else  echo  "error”

fi

~  模糊查询  用的时候必须要加[[

[[ 2 -le 5  -a  9  -le  8]]

[[ 2 -le 5  -o  9  -le  8]]

[[ 2 -le 5  &&  9  -le  8]]

[[ 2 -le 5  || 9  -le  8]]

二、流程控制if

1.单分支结构

if  [ command/test  ]  ;  then  符合条件的语句

fi

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

read  -p  ”请输入用户名:“  name

id $name &> /dev/null

if  [ $? -ne 0   ]

then  useradd  $name

fi

2.双分支结构

if  条件测试

then

命令序列

else

命令序列

fi

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

read  -p  ”请输入用户名:“  name

if  id $name &> /dev/null

then echo "用户已经存在"

else  useradd $name and  echo "用户已经创建"

fi

3.多分支结构

if  条件测试

then 命令序列

elif 条件测试

then 命令序列

elif 条件测试

then 命令序列

elif 条件测试

then 命令序列

...................

else

命令序列

fi

案例:编写脚本:取出系统时间,并对数字进行判断6-10morning 11-13 noon  14-18afternoon  其他night

hour=`date +%H`                                  date后有空格,没有报错,取时针的数
echo $hour
if [ $hour -ge 6 -a  $hour -le 10 ]
        then
                 echo "it is moring"
        elif [ $hour -ge 11 -a  $hour -le 13 ]
                then    echo "it is noon"
        elif [ $hour -ge 14 -a  $hour -le 18 ]
                then echo "it is afternoon"
        else
                echo "it is night"
fi

4.嵌套结构

if  条件测试  then 命令序列

        if  条件测试  then 命令序列

        else  命令序列

                fi

else     命令序列

fi

需求:

#!/bin/bash
read -p "input  username:" name
if id $name &> /dev/null
        then
        echo "$name exit"
        else
        useradd $name
        echo "$name create finished"

        read -p "please input user password :" pass
                if [ ${#pass} -ge  7 ]
                        then echo "$pass" | passwd --stdin $name     #--stdin从标准输入读取令牌(只有根用户才能进行此操作)
                             echo "$name user password $pass"
                        else echo "password not good"
                fi
fi

5.调试脚本

6.注意

三、模式匹配:case

相关推荐

  1. Liunx shell编程自动化实现--第三循环

    2024-01-29 23:40:01       34 阅读
  2. 开源数据库MYSQL DBA实战 第二 SQL

    2024-01-29 23:40:01       22 阅读
  3. Ansible 自动化企业实战 (三)

    2024-01-29 23:40:01       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-29 23:40:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-29 23:40:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-29 23:40:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-29 23:40:01       18 阅读

热门阅读

  1. 鸿蒙自定义组件内自定义构建函数

    2024-01-29 23:40:01       38 阅读
  2. 中国的文化是否是丛林文化?

    2024-01-29 23:40:01       39 阅读
  3. TS:子类型关系

    2024-01-29 23:40:01       31 阅读
  4. C#学习笔记_关键字ref、out

    2024-01-29 23:40:01       33 阅读