zoukankan      html  css  js  c++  java
  • 21 shell流程控制

    测试

    [ xxx ]

    参考上篇博客的元字符

    test

    test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

    参数
    -eq (=) 等于则为真
    -ne (!=) 不等于则为真
    -gt (>) 大于则为真
    -ge (>=) 大于等于则为真
    -lt (<) 小于则为真
    -le (<=) 小于等于则为真

    set写jio本的用法

    set -o errexit
    #等价于set -e , 有错误就退出。
    
    
    set -o nounset
    #在扩展一个没有的设置的变量的时候,    显示错误的信息
    
    set -o pipefail
    #set -e有一个例外情况,就是不适用于管道命令。所以就要pipefail(土话翻译是管道失败)所谓管道命令,就是多个子命令通过管道运算符(|)组合成为一个大的命令。Bash 会把最后一个子命令的返回值,作为整个命令的返回值。也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因此它后面命令依然会执行,set -e就失效了。
    

    if判断

    语法

    if 条件1;then
    	代码1
    	代码2
    	代码3
    elif 条件2;then
    	代码1
    	代码2
    	代码3
    elif 条件3;then
    	代码1
    	代码2
    	代码3
    .......
    else
    	代码1
    	代码2
    	代码3
    fi
    

    案例

    #!/bin/bash
    
    read -p "请输入您的分数: " score
    
    if [ $score -ge 90 ];then
        echo "优秀"
    elif [ $score -ge 80 ];then
        echo "良好"
    elif [ $score -ge 70 ];then
        echo "一般" 
    else
    	echo "很差"
    fi
    
    #!/bin/bash
    
    read -p "输入用户名:" inp_user
    read -p "输入密码:" inp_pwd
    
    if [ $inp_user = "egon" ] && [ $inp_pwd = "123" ];then
    	echo "登录成功"
    else
    	echo "用户名或者密码错误"
    fi
    

    while循环

    语法

    while true
    do
    	xxx
    	xxx
    	xxx
    done
    

    案例一

    #!/bin/bash
    
    while true
    do
        read -p "输入用户名:" inp_user
        read -p "输入密码:" inp_pwd
    
        if [ $inp_user = "egon" ] && [ $inp_pwd = "123" ];then
            echo "登录成功"
            break
        else
            echo "用户名或者密码错误"
        fi
    done
    

    案例二

    #动态监控
    while true;do ifconfig eth0;sleep 0.5;clear; done 
    

    for循环

    语法

    for i in [条件]
    do
    	xxx
    	xxx
    	xxx
    done
    

    案例

    方法一

    #!/bin/bash
    
    for i in {2..254}
    do
    
        ping -c1 1.1.1.$i &>/dev/null
        if [ $? -eq 0 ];then
            echo "1.1.1.$i ok"
        else
        	echo "1.1.1.$i down"
        fi
    
    done
    #相当于串行,自上而下的执行,效率很慢
    

    方法二

    #!/bin/bash
    
    for i in {2..254}
    do
    	(
        ping -c1 1.1.1.$i &>/dev/null
        if [ $? -eq 0 ];then
            echo "1.1.1.$i ok"
        else
        	echo "1.1.1.$i down"
        fi
        ) &
    done
    #开了好多的子shell去执行,同时运行,效率高
    
  • 相关阅读:
    AOP面向切面编程基础
    记第一次年会主持
    Tomcat服务器部署JavaWeb项目War包基本步骤
    VM14无法将网络更改为桥接状态:没有未桥接的主机网络适配器
    Ubuntu 16.04 安装 IDEA
    Linux之文件挂载
    图片大小
    打开文件、
    Setup Factory
    Repeater获取某一行TextBox值
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14648421.html
Copyright © 2011-2022 走看看