zoukankan      html  css  js  c++  java
  • 3、SHELL控制语句

    SHELL控制语句

    If 语句

    if [ expression ]; then

    Statements

    elif [ expression ]; then

    statements

    else statements

    Fi

    应该注意,if语句中else部分可以缺省。另外,if 语句的else部分还可以是elseif结构,此时可以用关键字“elif”代替“else if”。

    通常,if的测试部分是利用test命令实现的。其实,条件测试可以利用一般命令执行成功与否来作判断。如果命令正常结束,则表示执行成功,其返回值为0,条件测试为真;如果命令执行不成功,其返回值不等于0,条件测试就为假。所以if的语句的更一般形式是:

    if 命令表1

    then 命令表2

    else 命令表3

    Fi

    Case语句

    case 字符串 in

    模式字符串1) 命令

    命令;;

    模式字符串2) 命令

    命令;;

    模式字符串n) 命令

    命令;;

    Esac

    其执行过程是用字符串的值依次与各模式字符串进行比较,如果发现同某一个匹配,那么就执行该模式字符串之后的各个命令,直至遇到两个分号为止。如果没有任何模式字符串与该字符串的值相符合,则不执行任何命令。

    在使用case语句时应注意:

    1)每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号(即;;)结束。

    2)模式字符串中可以使用通配符。

    3) 如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。

    4)各模式字符串应是惟一的,不应重复出现。并且要合理安排它们的出现顺序。例如,不应将“*”作为头一个模式字符串,因为“*”可以与任何字符串匹配,它若第一个出现,就不会再检查其它模式了。

    5case语句以关键字case开头,以关键字esac(case倒过来写!)结束。

    6case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则退出值为零。

    while语句

    Shell中有三种用于循环的语句,它们是while语句、for语句和until语句。

    while语句的一般形式是:

     

    while 测试条件

     do

    命令表

    done

     

    其执行过程是,先进行条件测试,如果结果为真,则进入循环体(do—done之间部分), 执行其中命令;然后再做条件测试……直至测试条件为假时才终止while语句的执行。例如:

    while [ $1 ]

    do

    if [ -f $1 ]

    then echo "display : $1 "

    cat $1

    else echo "$1 is not a file name . "

    fi

    shift

    done

     

    这段程序对各个给定的位置参数,首先判断其是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。每次循环处理一个位置参数$1,利用shift命令可把后续位置参数左移。

    测试条件部分除使用test命令或等价的方括号外,还可以是一组命令。根据其最后一个命令的退出值决定是否进入循环体执行。

    until语句

    until语句的一般形式是:

     

    until 测试条件

    do

    命令表

    done

     

    它与while语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。

    for语句

    for语句是最常用的建立循环结构的语句。其使用格式主要有三种,取决于循环变量的取值方式。

    格式一:

    for 变量 in 值表

    do

    命令表

    done

     

    例如:

    for day in Monday Wednesday Friday Sunday

    do

    echo $day

    done

     

    其执行过程是,变量day依次取值表中各字符串,即第一次将“Monday”赋给day,然后进入循环体,执行其中的命令,显示出 Monday。第二次将“Wednesday”赋给day,然后执行循环体中命令,显示出Wednesday。依次处理,当day把值表中各字符串都取过 一次之后,下面day的值就变为空串,从而结束for循环。因此,值表中字符串的个数就决定了for循环执行的次数。在格式上,值表中各字符串之间以空格 隔开。

    格式二:

    for 变量 in 文件正则表达式

    do

    命令表

    done

     

    其执行过程是,变量的值依次取当前目录下(或给定目录下)与正则表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直至所有匹配的文件名取完为止,退出for循环。

    格式三:

    for i in $* 或者 for i

     do do

    命令表 命令表

    done done

     

    这两种形式是等价的。其执行过程是,变量依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。

    break命令和continue命令

    break命令可以使我们从循环体中退出来。其语法格式是:

    break [ n ]

     

    其中,n表示要跳出几层循环。默认值是1,表示只跳出一层循环。

    continue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。其语法格式是:

    continue [ n ]

    其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环。默认值为1。循环层数是由内向外编号。

    Shift语句

    用于处理位置变量,每一次一个变量从左向灰地处理。每次把每个变量向左移动一个位置,将当前的$1参数丢弃。

    Shift number

    默认number1,即左移一个位置。

    Shell执行脚本时,其实是生成了一个子shell,用这个子shell来执行脚本。

  • 相关阅读:
    第八次作业-非确定的自动机NFA确定化为DFA
    正规式到正规文法与自动机
    正则表达式基本介绍
    博客园源码不可copy的解决办法
    爬取湖北师范大学招生信息网中的专业简介
    利用爬虫爬取LOL官网上皮肤图片
    利用python的requests和BeautifulSoup库爬取小说网站内容
    python图像处理之PIL库
    Python之文件的使用
    python入门之jieba库的使用
  • 原文地址:https://www.cnblogs.com/mydomain/p/1833910.html
Copyright © 2011-2022 走看看