zoukankan      html  css  js  c++  java
  • 3.3 shell控制流结构

    shell中的控制流包括if then else语句,case语句,for循环,until循环,while循环,break控制,continue控制。

    条件测试:

      有时判断字符串是否相等或检查文件状态或是数字测试等,Test命令用于测试字符串、文件状态和数字。

      文件状态测试:

    在Linux下敲入命令,效果如下:

    test -w tmp.txt和[ -w tmp.txt ]的作用是一样的。

    也可以测试两个表达式,例如:[ EXPRESSION1 -a EXPRESSION2 ] 或者test EXPRESSION1 -a EXPRESSION2 

    示例程序如下:

    1 #!/bin/bash
    2 
    3 [ -d test ]
    4 
    5 if [ $? -eq "0" ];then
    6     echo "file is exist";
    7 else
    8     echo "file not exist";
    9 fi

    执行结果如下:

      字符串测试:

    测试两个字符串是否相等,如下所示:

    测试相等时,  = 两边要有空格,给变量赋值时,=号两边不能有空格。

      数值测试:

    示例如下:

      数字运算:

     运算符测试如下:

    要想执行正确的运算,加号两边要有空格。

      if then else语句:

    if 条件

    then 命令

    fi

    示例:

    if [ "13" -lt "12" ]

    then echo "yes 13 is less than 12"

    else

      echo "NO"

    fi

    1 if [ "13" -lt "12" ]
    2 
    3 then echo "yes 13 is less than 12"
    4 else
    5     echo "NO"
    6 fi
    1 if [ "13" -lt "12" ];then 
    2     echo "yes 13 is less than 12"
    3 else
    4     echo "NO"
    5 fi

    执行结果如下:

    if else then也可以写成下面的语法:

    if  条件1

    then

      命令1

    elif  条件2

    then

      命令2

    else

      命令3

    fi

    如下所示:

       case语句:

    示例程序如下:

     1 #!/bin/bash
     2 
     3 echo "enter a num(1-3):"
     4 
     5 read num
     6 
     7 case $num in
     8     1)
     9         echo "num is 1"
    10         ;;
    11     2)
    12         echo "num is 2"
    13         ;;
    14     3)
    15         echo "num is 3"
    16         ;;
    17     y|Y)
    18         echo "you select y"
    19         ;;
    20     *)
    21         echo "quit"
    22         exit
    23         ;;
    24 esac

    执行结果如下:

    basename可以从完整路径中取出文件名字:

      for循环:

    下图两个程序不一样,其中第一个是一个变量,第二个是三个变量:

    再看一个for的示例程序:

    1 #!/bin/bash
    2 
    3 for i in `cat file2.txt`
    4 do
    5     echo $i
    6 done

    其中in后面是反引号,里面的命令会执行,因此输出如下:

    file2.txt中的内容如果是下面这样,那打印结果如何呢?

    打印结果如下:

    可见for循环在列表中取每一项的时候,换行符和空格都作为分隔符。

    如果for语句的后面没有in语句,此时语句等价于: in  $@

    示例如下:

    运行结果如下:

    until循环:

    awk从一行数据中提取1列, sed的用法为 sed 's/old/new/g'  s表示替换,old是匹配到的老的数据,new是要替换成的新数据,g表示全部替换。

    上述程序中,当锁文件不存在时,退出until循环,until的意思是直到这个条件为真,就退出。注意[ ]里面的取反!。

    grep和awk小实例:

      while循环:

    示例如下:

    上述程序中,循环读入名字。

    从文件中读数据的示例如下:

    这个格式是固定的,重定位的文件名只能写在done之后。按行读入。如果写在LINE之后,程序会出错。

      break和cotinue:

    示例如下:

    while后面的冒号表示死循环。

    continue用法示例如下:

  • 相关阅读:
    HSL制作配色表
    css3 text-overflow制作固定区域的博客列表
    git 安装
    mailto: HTML e-mail 链接
    Sublime Text2 新建文件快速生成Html头部信息和炫酷的代码补全
    Git教程
    javscript 一些常用的工具方法
    LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式 的解决方法
    Dictionary and KeyValuePair关系
    C# 类动态添加属性、方法
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9382788.html
Copyright © 2011-2022 走看看