• 【shell脚本语法】判断(if)、流程控制(for、while等)语句


    目录

    一、判断用户参数

    1.1 文件判断参数

    PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行。详情可参考我另一篇博客:https://www.cnblogs.com/HeiDi-BoKe/p/11635473.html

    补充:逻辑语句有三个(与:&&,或:||,非:!)

    实例:

    1.2 比较运算符

    实例:

    # FreeMem=`free -m | grep Mem: | awk '{print $4}`
    # echo $FreeMem

    1.3 字符串比较符

    实例:

    二、流程控制语句

      下面介绍if、for、while、case这4中流程控制语句

    2.1 if条件判断语句

      if语句分为单分支,双分支,多分支

    2.1.1 if单分支语句

      单分支语句结构由if、then、fi关键词组成,只在条件成立才执行预设的语句。即如果...那么...

    语法:

    if 条件表达式;then
        命令
    fi

    实例:

    # vi ifDemo.sh
    #!/bin/bash
    DIR=/tmp/test/
    if [ ! -e $DIR ];then
            echo "$DIR 目录不存在"
            mkdir -p /tmp/test
    fi
    echo "$DIR 目录已存在"

    2.1.2 if双分支语句

      双分支语句结构由if、then、else、fi关键词组成,判断第一次的条件,如果匹配则执行,如果不匹配则执行else后面的命令。即如果...那么...或者...那么...

    语法:

    if 条件表达式;then
         命令1
    else 
        命令2
    fi

    实例:

    # 验证某台主机是否在线(这里使用从参数读取ip和直接写脚本中)
    # ping -c 指定次数,-i指定每个数据发送的间隔 -W指定等待时间
    # 方法一:从参数读取ip
    # vi ifelseDemo.sh
    #!/bin/bash
    if [ $# -eq 0 ];then
            echo "[usage] 请使用./ifelseDemo.sh ip地址"
            exit 0 
    fi
    ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
    if [ $? -eq 0 ];then
            echo "$1 是通的"
    else
            echo "$1 是不通的"
    fi
    
    #方法二:将ip直接写脚本里
    # vi ifelseDemo2.sh 
    #!/bin/bash
    if `ping -c 3 106.53.73.200 &> /dev/null`;then
            echo "通的"
    else
            echo "不通"
    fi

    2.1.3 if多分支语句

      多分支语句结构由if、then、else、elif、fi关键词组成,进行多次条件匹配,匹配成功则执行对应的预设语句。即如果...那么..如果...那么...

    语法:

    if 条件语句1;then
        命令1
    elif 条件语句2;then
        命令2
    ...
    else
        命令
    fi

    实例:

    # vi grade.sh
    #!/bin/bash
    read -p "请输入你的成绩(0-100): " GRADE
    if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ];then
    echo "[info] 您输入的成绩无效,请输入(0-100)之间包括0和100的数"
    elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then
    echo "$GRADE is Execllent"
    elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ];then
    echo "$GRADE is Pass"
    else
    echo "$GRADE is Fail"
    fi

    注意:一个[]表示判断文件或目录等是否存在,两个[[]]表示做运算判断(也可以写成[] && []或[] || [])

    2.2 for循环语句

      for语句能一次读取多个信息,然后逐一对信息进行操作处理

    语法:

    语法一:
    for
    变量名 in 取值列表 do 命令 done
    语法二:
    for ((expr1;expr2;expr3));do 命令列表 done 

    实例:

    # 提前准备好用户的文件
    [root@VM_0_10_centos shellScript]# vi username.txt
    test01
    test02
    test03
    test04
    test05
    test06
    # vi example.sh
    #!/bin/bash
    read -p "请输入用户密码:" PASSWD
    for UNAME in `cat username.txt`
    do
            id $UNAME &> /dev/null
            if [ $? -eq 0 ]
            then
                echo "$UNAME user is exists"
            else
                useradd $UNAME &> /dev/null
                echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
            if [ $? -eq 0 ]
            then
                echo "$UNAME,Create success"
            else
                echo "$UNAME,Create failure"
            fi
            fi
    done
    # 大于数字1小于数字10
    # cat for.sh
    #!/bin/bash
    for ((i=1;i<10;i++))
    do
        echo $i
    done
    # 结果
    # ./for.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 检查多个主机是否存活
    # cat ip.sh 
    #!/bin/bash
    for IP in ip地址
    do
        if `ping -c 2 $IP &> /dev/null`
        then
            echo -e "$IP OK"
        else
            echo "$IP NO"
        fi
    done
    # 结果
    # ./ip.sh 
    ip地址 OK
    ip地址 OK
    # 检查多个域名是否可以访问
    # cat http.sh 
    #!/bin/bash
    URL="域名1 www.baidu.com"
    for i in $URL
    do
    HTTP=`curl -i -m 10 -o /dev/null -s -w %{http_code}"
    " http://$i`
        if [ $HTTP -eq 200 -o $HTTP -eq 301 ]
        then
            echo "$i OK"
        else
            echo "$i NO"
        fi
    done
    # 结果
    # ./http.sh 
    域名1 NO
    www.baidu.com OK

    2.3 while语句

      while语句通过判断条件的真假来决定是否执行命令。条件为真则执行,为假则结束循环。当表达式为true时,会变成死循环

    语法:

    while 条件
    do
        命令
    done

    参考我另一篇博客:https://www.cnblogs.com/HeiDi-BoKe/p/13072979.html

    补充:

    1)break:终止循环

    2)continue:跳出当前循环,执行下一个循环

    2.4 case条件语句

      用于选择性的执行对应的命令

    语法:

    case 模块名 in
    模式1)
        命令;;
    模式2)
        命令;;
    ...
    *)
        命令
    esac

    实例:

    # cat case.sh 
    #!/bin/bash
    read -p "请输入任意字符,并按Enter键确认:" KEY
    case $KEY in
    [a-z][A-Z])
        echo "您输入是字母。"
        ;;
    [0-9])
        echo "您输入是数字。"
        ;;
    *)
        echo "您输入是空格,下划线,功能键或其他"
    esac

    2.5 Until循环语句

    # 知道满足条件才退出,否则执行action
    until 条件
    do
        action
    done

    三、选择语句

    select语句:

    select 变量名 in 语句
    do
        action
    done
    [root@rhel8 shell]# cat select_menu.sh
    #!/bin/bash
    
    PS3="Select your will exec Menu:"
    
    select i in "Apache" "MySQL" "PHP"
    
    do
    
        case $i in
    
            Apache)
                echo "wait install httpd server..."
                ;;
            MySQL)
                echo "wait install MySQL server..."
                ;;
            PHP)
                echo "wait install PHP server..."
                ;;
            *)
                echo -e "33[32mUsage: { $0 Apache|MySQL|PHP|help}33[0m"
                ;;
        esac
    done
  • 相关阅读:
    POJ题目分类(转)
    ACM训练计划建议(转)
    ACM题集以及各种总结大全(转)
    HDU 2673 (排序)
    HDU 1391 number steps(找规律,数学)
    HDU 1280 前m大的数(排序,字符串)
    HDU 1236 排名(结构体+排序)
    2015 湘潭大学程序设计比赛(Internet)H题-括号匹配
    最短路---hdu2544
    Rescue--hdu1242
  • 原文地址:https://www.cnblogs.com/HeiDi-BoKe/p/11837160.html
Copyright © 2020-2023  润新知