`

Shell 流程控制

阅读更多

Shell 流程控制

和Java、PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法):

<?php
if(isset($_GET["q"])){
    search(q);}else{// 不做任何事情}

在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else,就像这样


if else

if

if 语句语法格式:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

写成一行(适用于终端命令提示符):

if[ $(ps -ef | grep -c "ssh")-gt 1];then echo "true";fi

末尾的fi就是if倒过来拼写,后面还会遇到类似的。

if else

if else 语法格式:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

if else-if else

if else-if else 语法格式:

if condition1
then
    command1
elif condition2
    command2
else
    commandN
fi

if else语句经常与test命令结合使用,如下所示:

num1=$[2*3]
num2=$[1+5]if test $[num1]-eq $[num2]then
    echo '两个数字相等!'else
    echo '两个数字不相等!'fi

输出结果:

两个数字相等!

for 循环

与其他编程语言类似,Shell支持for循环。

for循环一般格式为:

forvarin item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成一行:

forvarin item1 item2 ... itemN;do command1; command2done;

当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

例如,顺序输出当前列表中的数字:

for loop in12345do
    echo "The value is: $loop"done

输出结果:

The value is:1The value is:2The value is:3The value is:4The value is:5

顺序输出字符串中的字符:

for str in'This is a string'do
    echo $str
done

输出结果:

Thisis a string

while 语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

while condition
do
    command
done

以下是一个基本的while循环,测试条件是:如果int小于等于5,那么条件返回真。int从0开始,每次循环处理时,int加1。运行上述脚本,返回数字1到5,然后终止。

#!/bin/shint=1while(( $int<=5))do
        echo $int
        let"int++"done

运行脚本,输出:

12345

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的电影名: 'while read FILM
do
    echo "是的!$FILM 是一部好电影"done

运行脚本,输出类似下面:

按下<CTRL-D>退出输入你最喜欢的电影名: w3cschool菜鸟教程是的!w3cschool菜鸟教程是一部好电影

无限循环

无限循环语法格式:

while:do
    command
done

或者

whiletruedo
    command
done

或者

for((;;))

 


until 循环

until循环执行一系列命令直至条件为真时停止。

until循环与while循环在处理方式上刚好相反。

一般while循环优于until循环,但在某些时候—也只是极少数情况下,until循环更加有用。

until 语法格式:

until condition
do
    command
done

条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次—请注意这一点。


case

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

casein模式1)
    command1
    command2
    ...
    commandN
    ;;模式2
    command1
    command2
    ...
    commandN
    ;;esac

case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

下面的脚本提示输入1到4,与每一种模式进行匹配:

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in1)  echo '你选择了 1';;2)  echo '你选择了 2';;3)  echo '你选择了 3';;4)  echo '你选择了 4';;*)  echo '你没有输入 1 到 4 之间的数字';;esac

输入不同的内容,会有不同的结果,例如:

输入14之间的数字:你输入的数字为:3你选择了3

跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。

下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。

#!/bin/bashwhile:do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in1|2|3|4|5) echo "你输入的数字为 $aNum!";;*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"break;;esacdone

执行以上代码,输出结果为:

输入15之间的数字:3你输入的数字为3!输入15之间的数字:7你输入的数字不是15之间的!游戏结束

continue

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

对上面的例子进行修改:

#!/bin/bashwhile:do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in1|2|3|4|5) echo "你输入的数字为 $aNum!";;*) echo "你输入的数字不是 1 到 5 之间的!"continue
            echo "游戏结束";;esacdone

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo "Game is over!" 永远不会被执行。


esac

case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。

 
本文转自:http://www.w3cschool.cc/linux/linux-shell-process-control.html
分享到:
评论

相关推荐

    SHELL流程控制

    一、expr命令用法 P67 二、控制流结构 之 if then else P68 三、控制流结构 之 case P69 四、控制流结构 之 for循环 P70 五、控制流结构 之 until循环 P71 六、控制流结构 之 while...九、退出Shell语句 之 exit P74

    shell 流程控制语句

    shell 流程控制语句 shell 流程控制语句是 shell 编程中非常重要的组成部分,它们允许用户根据不同的条件和情况执行不同的命令或操作。shell 流程控制语句可以分为条件选择语句、循环语句和跳转语句等。 条件选择...

    shell编程 创建shell脚本 shell 基础语法 shell流程控制语法 shell函数

    下面将详细介绍创建 Shell 脚本、Shell 基础语法、流程控制语法以及如何定义和使用 Shell 函数。 首先,让我们理解一下 Shell 编程的基础。Shell 是操作系统提供的一种命令解释器,用户通过 Shell 与操作系统进行...

    UNIX下的shell流程控制教程

    ### UNIX下的Shell流程控制教程知识点解析 #### 一、Shell 流程控制基础概念 在UNIX环境下,Shell脚本是进行系统管理和自动化任务的重要工具之一。掌握Shell脚本中的流程控制逻辑对于编写高效且功能丰富的脚本至关...

    『忘了再学』Shell流程控制 — 33、if条件判断语句(一).doc

    Shell 流程控制中的 if 条件判断语句是编程中不可或缺的一部分,它允许程序员根据特定条件执行不同的代码块。本文将重点介绍 if 条件判断语句的基础知识,包括单分支和双分支的用法。 1、单分支 if 条件语句 单分支...

    浅谈Shell 流程控制

    Shell脚本语言是Linux/Unix系统中用于自动化任务和管理系统的强大工具,它的流程控制结构是实现复杂逻辑的关键部分。本文将深入探讨Shell中的流程控制,包括if、if-else、if-elif-else、for、while和until循环,以及...

    unix shell程序设计

    Shell作为Unix系统中的一个重要组成部分,不仅充当命令解释程序的角色,解析并执行用户输入的命令,还能作为一个高级程序设计语言,拥有丰富的语法结构和控制语句。 在Unix系统中,存在多种shell类型,包括Bourne ...

    shell脚本入门-流程控制-Shell脚本中常用流程控制机制及其应用介绍

    本文介绍了Shell脚本中几种常用的流程控制结构,包括if语句、case语句、for循环、while循环以及until循环,每种结构都给出了具体的使用场景和实例说明,旨在帮助初学者快速掌握Shell脚本的基本流程控制方法。...

    Shell脚本流程控制详解与实战

    内容概要:本文详细介绍了Shell脚本的流程控制结构,包括条件判断、循环控制和跳转控制。条件判断主要讲解了if语句及其变种形式(如if-else、if-elif-else),并讨论了各种条件表达式的使用方法。循环控制部分涵盖了...

    简单shell程序

    这些函数接收命令和参数作为参数,然后将控制权转移给新程序。在我们的简单Shell程序中,我们可以让用户输入命令,然后解析命令行参数,并使用`exec()`来执行它们。 编写这样的Shell程序,你需要对Linux系统调用有...

    西南科大+Linux实验报告+shell程序开发

    【Linux Shell 程序开发】 ...通过编写和分析Shell脚本,熟悉了循环、判断等控制结构,以及文件操作。在代码阅读过程中,对Linuxer的主要实现有了更深的理解,进一步提升了Linux系统管理和编程能力。

    cshell 教程 非常好用哦

    CShell流程控制 - **条件语句**:`if`、`else`、`elseif`用于条件判断,如: ```bash if [ condition ] then command1 else command2 fi ``` - **循环语句**:`while`、`until`用于循环,`for`用于遍历,如: ``...

    wind-fire#Linux-note-follow-Hanshunping#5.8Shell流程控制1

    下面的脚本提示输入1到4,与每一种模式进行匹配:echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'1) echo '你选择了 1'2)

    shell程序集锦 linux程序

    7. **流程控制**:`break`, `continue`用于中断或继续当前循环,`return`用于结束函数并返回值。 8. **逻辑运算符**:如`-eq`, `-ne`, `-gt`, `-lt`, `-le`, `-ge`等用于比较操作。 9. **字符串操作**:`echo`, `...

    linux shell程序设计实验1

    Bash是最常见的Shell,提供了丰富的内置命令、变量、控制结构和函数,使得编写自动化脚本变得简单。 二、`case`语句 `case`语句在Shell编程中用于多分支选择。它的基本语法如下: ```bash case $变量 in 模式1) ...

    模拟的shell程序

    在Linux系统中,shell是最常见的接口,用户可以输入命令来执行各种操作,如管理文件、运行程序、控制进程等。本文将深入探讨如何模拟一个简单的shell程序,以及涉及到的相关知识点。 首先,"shell(含cd).c"和"shell...

    精通 LINUX & UNIX Shell 程序设计.pdf 高清下载

    由于提供的内容中仅包含标题、描述、标签和下载链接的重复信息,并没有具体到Linux和UNIX Shell程序设计的技术细节,因此无法直接从这部分内容中提取出符合要求的知识点。为了满足您的要求,我将基于标题和标签中...

Global site tag (gtag.js) - Google Analytics