Linux Shell编程及自动化运维实现 第2章  判断

Linux Shell编程及自动化运维实现 第2章  判断

一Shell条件表达式

    1.1格式

       格式1:test条件表达式

       格式2:[条件表达式]

       格式3:[[条件表达式]]

    1.2、文件测试

       -f filename : 当filename 存在时返回真

       -b filename : 当filename 存在并且是块文件时返回真(返回0)

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

       -h filename : 当filename 存在并且是符号链接文件时返回真 (或 -L filename)

       -u pathname : 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真

 

       -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 的用户的用户组时返回真

       file1 -nt file2 : file1 比file2 新时返回真

       file1 -ot file2 : file1 比file2 旧时返回真

    1.3数值比较

       操作:

           [ 1 -gt 10 ] 大于

           [ 1 -lt 10 ] 小于

           [ 1 -eq 10 ] 等于

           [ 1 -ne 10 ] 不等于

           [ 1 -ge 10 ] 大于等于

           [ 1 -le 10 ] 小于等于

    1.4字符串比较

       =,==等于

       !=,不等于

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

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

       小结:变量为空或未定义: 长度都为0

    1.5and和or

       && 逻辑的 AND 的意思, -a 也是这个意思,两个条件同时成立,为真。

       ||  逻辑的 OR 的意思, -o 也是这个意思,两个条件一个成立,为真。

二、流程控制:if

    2.1单分支结构

       语法:

           if 条件测试

           then 命令序列

           fi

       示例:

    2.1双分支结构

       语法:

           if 条件测试

           命令序列

           else

           命令序列

           fi

       示例:

    2.3多分支结构

       语法

           多分支结构

           if 条件测试1

           then 命令序列

           elif 条件测试2

           then 命令序列

           elif 条件测试3

           then 命令序列...

           else 命令序列

           fi

    2.4嵌套结构

       if 条件测试1  then 命令序列

        if 条件测试1  then 命令序列

        else 命令序列

        fi

       else 命令序列

       fi

三、模式匹配:case

    3.1case语法结构

       case 变量 in

       模式1)

       命令序列1

       ;;

       模式2)

       命令序列2

       ;;

       模式3)

       命令序列3

       ;;

       *)

       无匹配后命令序列

       esac

    3.2简单的模式匹配

        案例:邀请用户输入待删除用户名,询问用户,确定继续删除吗yes/no:y

       #!/bin/bash

       #name

       #time

       #1请输入删除的用户名:

       read -p "please input a username : " user

       #2输出用户ID

       id $user &> /dev/null

       #4判断用户是否存在

       if [ $? -ne 0 ];then

        echo "no such user:  $user"

        exit 1

       fi

       #3请用户确认是否删除

       read -p "are you sure?[y/n]: " action

       #if [ "$action" = "y" -o "$action" = "Y" ] ;then

       #       userdel -r $user

       #       echo "$user is deleted!"

       #else

       #       echo "thank you"

       #fi

       #5case写法

       case "$action" in

       Y|y|YES|yes)

       userdel -r $user

       echo "$user is deleted!"

       ;;

       *)

       echo "thank you"

       ;;

       esac

    3.3简单的JumpServer

        #!/usr/bin/bash

        #定义目标主机IP

       web1=192.168.122.152

       web2=192.168.122.128

       mysql1=192.168.122.88

        #跳转菜单不退出

       while :

       do

       #打印跳转菜单

       cat <<EOF

       1.WEB1

       2.WEB2

       3.MYSQL1

       EOF

       #读取用户输入

       read -p "input number: " num

       #判断用户选择

       case $num in

       1)

       ssh alice@$web1

       ;;

       2)

       ssh alice@$web2

       ;;

       *)

       echo '123'

       esac

       done

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值