• Linux之shell编程条件判断-if,while,for,case


    原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6675350.html

    微信:intsmaze

    if 语法格式

    if condition 
    then  statements 
    [elif condition 
        then statements] 
    [else 
        statements ] 
    fi

    示例

    vi if.sh

    #!/bin/bash
    if [ $1 = root ]
    then
       echo "hello $2 ,  welcome !"
    elif [ $1 = intsmaze ]
    then
       echo "hello ${2},  welcome !"
    else
       echo "SB${2}, get out here !"
    fi

    sh if.sh intsmaze nihao 通过执行脚本时,在脚本命令的后面传入参数。

    判断条件

    1:条件判断基本语法

    [ condition ]  (注意condition前后要有空格)

    #非空返回true,可使用$?验证(0为true,1为false)

    #空返回false,里面条件为空格也是叫空。

    [hadoop@centos-Reall-131 shtest]$ if [ 1 ]; then echo ok ;else echo bad; fi; 
    ok
    [hadoop@centos-Reall-131 shtest]$ if [ 0 ]; then echo ok ;else echo bad; fi;  
    ok
    [hadoop@centos-Reall-131 shtest]$ if [ a ]; then echo ok ;else echo bad; fi;  
    ok
    [hadoop@centos-Reall-131 shtest]$ if [  ]; then echo ok ;else echo bad; fi;    
    bad
    [hadoop@centos-Reall-131 shtest]$ if [   ]; then echo ok ;else echo bad; fi; 
    bad

    注意[  ]内部的=周边的空格,有区别:

    [hadoop@centos-Reall-131 shtest]$ if [ a=b ]; then echo ok ;else echo bad; fi;  
    ok
    [hadoop@centos-Reall-131 shtest]$ if [ a = b ]; then echo ok ;else echo bad; fi; 
    bad

    #a=b它识别为一个整体的字符串,所以条件判断为true

    短路(理解为三元运算符)

    [ condition ] && echo OK || echo notok

    条件满足,执行&&后面的语句;条件不满足,执行|| 后面的语句

    2:条件判断组合

    注:[] 与[[ ]] 的区别:[[ ]] 中逻辑组合可以使用 &&(与) ,||(或) ,而[] 里面逻辑组合可以用 -a(与) ,-o(或)。

    [hadoop@centos-Reall-131 shtest]$ if [ a = b && b = c ]; then echo ok;else echo bad;fi  
    -bash: [: missing `]'
    bad
    [hadoop@centos-Reall-131 shtest]$  if [ a = b -a b = b ]; then echo ok;else echo bad;fi  
    bad
    [hadoop@centos-Reall-131 shtest]$ if [ a = b -o b = b ]; then echo ok;else echo bad;fi  
    ok
    [hadoop@centos-Reall-131 shtest]$ if [[ a = b && b = b ]]; then echo ok;else echo bad;fi  
    bad
    [hadoop@centos-Reall-131 shtest]$ if [[ a = b || b = b ]]; then echo ok;else echo bad;fi  
    ok

    3:常用判断运算符

    字符串比较:= ,!= ,-z 字符串长度是为0返回true-n 字符串长度是不为0返回true这里不包括空格的情况。

    [hadoop@centos-Reall-131 shtest]$ if [ 'aa' = 'bb' ]; then echo ok; else echo bad;fi #引号可有可无,当然在进行比较时最好使用引号更好表示。
    bad
    [hadoop@centos-Reall-131 shtest]$ if [ -n "aa" ]; then echo ok; else echo bad;fi
    ok
    [hadoop@centos-Reall-131 shtest]$ if [ -z "" ]; then echo ok; else echo bad;fi
    ok

    整数比较:

    -lt 小于

    -le 小于等于

    -eq 等于

    -gt 大于

    -ge 大于等于

    -ne 不等于

    文件判断:

    -d 是否为目录

    -f 是否为文件

    -e 是否存在

    [hadoop@centos-Reall-131 shtest]$ if [ -d /home/hadoop ]; then echo ok; else echo bad;fi    
    ok
    [hadoop@centos-Reall-131 shtest]$ if [ -f /home/hadoop/ ]; then echo ok; else echo bad;fi      
    bad
    [hadoop@centos-Reall-131 shtest]$ if [ -e /home/hadoop/ ]; then echo ok; else echo bad;fi      
    ok

    路径必须找得到,如果没有找到指定路径的文件,则判断条件就为false。

    while语法

    i=1
    while ((i<=3))
    do
      echo $i
      let i++ #(等价((i++)))
    done

    case语法

    case $1 in
    start)
    echo "starting"
    ;;
    stop)
    echo "stoping"
    ;;
    *)#其他条件都不匹配下,执行该
    echo "Usage: {start|stop}"
    esac

    for语法

    1、方式一
    N=1
    for
    N in 1 2 3 do echo $N done 或 N=1 for N in 1 2 3; do echo $N; done 或 N=1 for N in {1..3}; do echo $N; done #(代表1到3之间的数字)
    2、方式二
    for ((i = 0; i <= 5; i++))
    do
    echo "welcome $i times"
    done

    for ((i = 0; i <= 5; i++)); do echo "welcome $i times";done
  • 相关阅读:
    三个录屏软件
    不用 PS 和 AI,5个网站能做出更好看的设计
    使用vue.js开发小程序
    js异步处理
    HTTP、HTTP1.0、HTTP1.1、HTTP2.0、HTTPS
    Chrome不支持css字体小于12px的解决办法
    处理CSS前缀问题的神器——AutoPrefixer
    CSS | 字体系列
    qemu-img 命令讲解
    全面理解 git
  • 原文地址:https://www.cnblogs.com/intsmaze/p/6675350.html
Copyright © 2020-2023  润新知