zoukankan      html  css  js  c++  java
  • Shell记录-Shell脚本基础(三)

    if...fi 语句的基本控制语句,它允许Shell有条件作出决定并执行语句。

    语法

    if [ expression ]
    then
       Statement(s) to be executed if expression is true
    fi

    Shell expression求值。如果结果值是true,给定statement被执行。如果 expression 为false ,则没有语句将不会被执行。大部分的时候,会使用比较操作符决策。

    关注对括号和表达之间的空间。这个空间是强制性的,否则语法错误。

    如果expression 是一个shell命令,那么它会被假定如此,如果它执行后返回0。如果它是一个布尔表达式,那么返回true。

    例子:

    #!/bin/sh
    
    a=10
    b=20
    
    if [ $a == $b ]
    then
       echo "a is equal to b"
    fi
    
    if [ $a != $b ]
    then
       echo "a is not equal to b"
    fi

    这将产生以下结果:

    a is not equal to b

     if...else...fi 语句是控制语句,它允许下一个表格执行语句 Shell 更可控的方式在两个选择之间作出决定。

    语法

    if [ expression ]
    then
       Statement(s) to be executed if expression is true
    else
       Statement(s) to be executed if expression is not true
    fi

     Shell expression 求值。如果结果值是真实的,给定 statement(s) 被执行。如果表达式为 false,则语句将不会被执行。 

    例子:

    如果我们把上面的例子中,那么它可以用更好的方式使用 if...else 语句如下:

    #!/bin/sh
    
    a=10
    b=20
    
    if [ $a == $b ]
    then
       echo "a is equal to b"
    else
       echo "a is not equal to b"
    fi

    这将产生以下结果:

    a is not equal to b

    if...elif...fi 语句是提前一个级别的控制语句,形式出几个条件,允许 Shell 作出正确的决定。

    语法

    if [ expression 1 ]
    then
       Statement(s) to be executed if expression 1 is true
    elif [ expression 2 ]
    then
       Statement(s) to be executed if expression 2 is true
    elif [ expression 3 ]
    then
       Statement(s) to be executed if expression 3 is true
    else
       Statement(s) to be executed if no expression is true
    fi

    这段代码没有什么特别的。这仅仅是一个系列,if 语句每一个语句else子句的一部分。下面语句是执行的基础上的真实情况,如果条件不为 ture,则执行else块。

    例子:

    #!/bin/sh
    
    a=10
    b=20
    
    if [ $a == $b ]
    then
       echo "a is equal to b"
    elif [ $a -gt $b ]
    then
       echo "a is greater than b"
    elif [ $a -lt $b ]
    then
       echo "a is less than b"
    else
       echo "None of the condition met"
    fi

    这将产生以下结果:

    a is less than b

    可以使用多个if...elif 语句执行多分支。然而,这并不总是最佳的解决方案,尤其是当所有的分支依赖于一个单一的变量的值。

    Shell支持 case...esac  语句处理正是这种情况下,它这样做比 if...elif 语句更有效。

    语法

    case...esac 语句基本语法 是为了给一个表达式计算和几种不同的语句来执行基于表达式的值。

    解释器检查每一种情况下对表达式的值,直到找到一个匹配。如果没有匹配,默认情况下会被使用。

    case word in
      pattern1)
         Statement(s) to be executed if pattern1 matches
         ;;
      pattern2)
         Statement(s) to be executed if pattern2 matches
         ;;
      pattern3)
         Statement(s) to be executed if pattern3 matches
         ;;
    esac

    这里的字符串字每个模式进行比较,直到找到一个匹配。执行语句匹配模式。如果没有找到匹配,声明退出的情况下不执行任何动作。

    没有最大数量的模式,但最小是一个。

    当语句部分执行,命令;; 表明程序流程跳转到结束整个 case 语句。和C编程语言的 break 类似。

    例子:

    #!/bin/sh
    
    FRUIT="kiwi"
    
    case "$FRUIT" in
       "apple") echo "Apple pie is quite tasty." 
       ;;
       "banana") echo "I like banana nut bread." 
       ;;
       "kiwi") echo "New Zealand is famous for kiwi." 
       ;;
    esac

    这将产生以下结果:

    New Zealand is famous for kiwi.

    case语句是一个很好用的命令行参数如下计算:

    #!/bin/sh
    
    option="${1}" 
    case ${option} in 
       -f) FILE="${2}" 
          echo "File name is $FILE"
          ;; 
       -d) DIR="${2}" 
          echo "Dir name is $DIR"
          ;; 
       *)  
          echo "`basename ${0}`:usage: [-f file] | [-d directory]" 
          exit 1 # Command to come out of the program with status 1
          ;; 
    esac

    下面是一个示例运行这个程序:

    $./test.sh
    test.sh: usage: [ -f filename ] | [ -d directory ]
    $ ./test.sh -f index.htm
    $ vi test.sh
    $ ./test.sh -f index.htm
    File name is index.htm
    $ ./test.sh -d unix
    Dir name is unix
    $
     
  • 相关阅读:
    shell 遍历当前目录以及所有子目录下文件
    linux shell 字符串操作(长度,查找,替换)详解
    将自定义结构存入std::set 或者 std::map
    CentOS下搭建SVN服务器
    基于Debian的linux系统软件安装命令
    rm搭配grep删除符合条件的文件
    Centos系统环境
    怎么恢复用mysqldump备份数据和恢复数据
    mac 安装 node.js 的 canvas
    centos 6.5 安装 node.js 的 canvas模块
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7724223.html
Copyright © 2011-2022 走看看