Linux | Shell流程控制语句

流程控制语句

简单的Shell 脚本还不能满足我们日常工作的需要要,因为他不能批量的帮我们完成工作,所以Shell引入了 if、for、while、case 4种流程控制语句来帮助我们完成工作。

if 条件判断语句

if 语句可以让脚本根据实际情况自动执行相应的命令,if语句可以为单分支结构双分支结构多分支结构
if 语句由 if,then,else,fi 等关键字组成,在符合条件之后才会执行 then后面的语句,否则会执行 else 后面语句。
if 语句的使用

    # 单分支结构
    if [ 条件判断语句  ];
    then
        要执行的语句
    fi
    
    # 双分支结构
    if [ 条件判断语句  ];
    then 
        符合条件执行的语句
    else
        不符合条件执行的语句
    fi
    
    # 多分支结构
    if [ 条件判断语句  ];
    then 
        符合条件执行的语句
    elif [ 条件判断语句  ]
        符合条件执行的语句
    else
        不符合条件执行的语句
    fi

test.sh 判断是否存在这个目录,不存在则创建

    #!/bin/bash
    TEST_DIR="/mnt/test/"
    if [ ! -e $TEST_DIR  ];
    then
        mkdir -p $TEST_DIR
    fi

test02.sh 判断一个IP是否能ping通

    #!/bin/bash
    ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
    if [ $? -eq 0  ];
    then 
        echo "Host $1 is on-line"
    else
        echo "Host $1 is off-line"
    fi

ping 命令的 -c 参数为指定请求次数为3次,请求的间隔为 0.3 秒,请求超时的时长为 3 秒,$? 命令的意思是获取上一次执行的命令的结果。0为正确,其余的都为错误。

test03.sh 可以直接使用命令的执行结果进行判断

    #!/bin/bash
    if [ `ps -ef | grep mysql | grep -v grep`  ];then
        echo "mysql is runing"
    else 
        echo "mysql is not runing"
    fi

for 条件循环语句

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行处理,当要处理大量有规则的数据时,for 循环就有非常大的作用了。

    for 变量名 in 取值列表
    do
        待执行命令
    done

我们可以通过一个例子来了解一下:

    #!/bin/bash
    echo "read txt file test.txt"
    for txt in `cat test.txt`
    do
        echo "file info $txt"
    done

这个例子说明,可以通过for循环,从文件中读取数据,那么这样的话,我们的操作就非常的多了,比如,可以通过读取文件中的内容,创建用户,也可以修改系统的定时任务,还可以读取系统的参数文件,然后做出相应的判断,最后实现我们的功能。
上面的一个例子,是一个非常简单的功能,在实际应用中,我们还可能和 if 或者别的命令一起使用

while 条件循环语句

while 条件循环语句其实和 for 语句一样,都是循环语句,但是这两个循环语句的循环条件有点不一样, for 语句,是跟据读入的数组长度进行执行的,但是while 循环语句的执行条件是跟据条件是否为true 来执行的,所以两者的结构上有点不一样,但是实现的功能其实还是一样的。
结构:

    while 条件语句
    do 
        命令语句
    done

case 条件判断语句

case 语句是在多个范围之内进行匹配数据,若匹配成功则执行相关命令并结束整个条件测试,而如果数据不在所列出的范围内,则会去执行 * 号内的默认命令。

    case 变量值 in 
    模式1)
        命令1
        ;;
    模式2)
        命令2
        ;;
    *)
        默认命令
    esac

下面我们就通过一个简单的命令进行测试:

    #!/bin/bash
    read -p "请输入一个字符,并按Enter确认:" KEY
    case "$KEY" in
    [a-z][A-Z])
        echo "你输入的是字母:$KEY"
        ;;
    [0-9])
        echo "你输入的是数字:$KEY"
        ;;
    *)
        echo "你输入的是空格,或者特殊字符:$KEY"
    esac

使用case可以帮助我们在有许多判断的时候进行简单一点的脚本编写,并且结构也更加的合理



关注公众号,随时获取最新资讯

细节决定成败!
个人愚见,如有不对,恳请斧正!

posted @ 2021-07-10 23:41  一点浩然气~  阅读(95)  评论(0编辑  收藏  举报