Shell 流程控制

Shell 流程控制

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

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

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



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

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

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

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

输出结果:

两个数字相等!

for 循环

in列表可以包含替换、字符串和文件名。

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

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

输出结果:

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

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

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

输出结果:

This is a string

while 语句

#!/bin/sh

int=1
while(( $int<=5 ))
do
        echo $int
        let "int++"
done

运行脚本,输出:

1
2
3
4
5

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

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

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

无限循环

无限循环语法格式:

while :
do
    command
done

或者

while true
do
    command
done

或者

for (( ; ; ))

until 循环

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

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

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

until 语法格式:

until condition
do
    command
done

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


case

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

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

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

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

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

输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3

break命令

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

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

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

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

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

continue

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

对上面的例子进行修改:

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

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


esac

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

时间: 2024-08-26 08:53:27

Shell 流程控制的相关文章

linux shell 流程控制

linux shell 流程控制 导读 和Java.PHP等语言不一样,linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使用方法. 一.shell条件语句(if用法) if语句结构[if/then/elif/else/fi] if 条件测试语句 then action [elif 条件 action else action ] fi shell命令,可以按照分号分割,也可以按照换行符分

Linux shell 流程控制(条件if,循环for,while)

Linux shell 流程控制(条件if,循环[for,while],选择[case]语句实例 linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使用方法. 一.shell条件语句(if用法) if语句结构[if/then/elif/else/fi] if 条件测试语句 then action [elif 条件 action else action ] fi 如果对于:条件测试语句不是

Shell流程控制

防伪码:床前明月光,疑是地上霜. 流程控制是改变程序运行顺序的指令. f 4.1 if  语句 格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi 4.1.1 单分支 if 条件表达式; then 命令 fi 示例: #!/bin/bash N=10 if [ $N -gt 5 ]; then echo yes fi # bash test.sh yes 4.1.2 双分支 if 条件表达式; then 命

第四章 Shell流程控制

流程控制是改变程序运行顺序的指令. 4.1 if语句 4.1.1 单分支 if 条件表达式; then     命令 fi 示例: #!/bin/bash N=10 if [ $N -gt 5 ]; then     echo yes fi # bash test.sh yes 4.1.2 双分支 if 条件表达式; then     命令 else     命令 fi 示例: #!/bin/bash N=10 if [ $N -lt 5 ]; then     echo yes else   

Bash Shell 流程控制 —— select

前言 今天刚好写了一个自动化打包脚本,再次使用到了bash shell,好幸福的感觉.这里主要是想介绍一下select命令,这个命令可以帮助我们完成菜单选择功能. 格式 我今天也是第一次使用select流程控制,在php.Java.C这些语言中并没有实现select功能.Bash Shell中,select格式如下: select $var in ${list[@]} do statements that can use $var done 在select执行时,会根据list数组给出选择菜单,

shell--8、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    ...     comma

shell - 流程控制if

流程控制if 字符比较 1. [ "$a" == "$b"] 2. != 不等于 3. -z 字符串长度为零为真 4. -n 字符串长度不为空则为真 [ -n "$a" ] 5. str1>str2 # 多条件对比 a : and o : or [ 1 -lt 2 -a 5 -lt 10];echo $? # 正则对比会使用 [[]] && 且 || 或 [[ 1 -lt 5 || 5 -gt 10 ]];echo $? 例

linux shell学习之shell流程控制

在linux shell编程中,流程控制结构与语句,也算是shell脚本中的重点了,不了解的朋友,跟随脚本小编一起来学习下吧. linux控制流结构学习. 一,shell控制流结构 1.控制结构   6.while循环 2.if then else语句 7.until循环 3.case 语句  8.break控制 5.for循环    9.continue控制 1,if then else  if 条件1 如果条件1为真  then 那么  命令1 执行命令1  elif 条件2 如果条件1不成

Linux Shell——流程控制

一. 创建交互式脚本 使用 echo命令的选项 关于各种命令的使用,可以使用man 命令来查看命令的详细用法介绍.例如,我想看下 echo 的用法和各种选项.可以执行 man echo.执行结果如下: 如果单独执行 echo 命令,就会打印出一个空白行.默认情况下,echo 都会换行,如果不想换行的话,可以使用下面两种方式的一种. echo -n "Which directory do you want to use? " echo -e "Which directory d