zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/intsmaze/p/6675350.html
Copyright © 2011-2022 走看看