• Bash-流程控制


    if else 

    和 Java、PHP 等语言不一样,sh 的流程控制不可为空

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

    if-elif-else 语法格式:

    if else 语句经常与 test 命令结合使用

    test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

    for循环

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

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

    while语句

    while 循环用于不断执行一系列命令

    用于从输入文件中读取数据可用于读取键盘信息。

    命令通常为测试条件。

    使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。

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

    运行时候除非ctrl+d,不然会一直while下去。

    Linux read命令用于从标准输入读取数值。read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

    let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来

    关于echo命令 echo -n 、echo -e

    echo -n 不换行输出

    echo -e 处理特殊字符

    若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出: 

        a 发出警告声; 

         删除前一个字符; 

        c 最后不加上换行符号; 

        f 换行但光标仍旧停留在原来的位置; 

        换行且光标移至行首; 

        光标移至行首,但不换行; 

        插入tab; 

        v 与f相同; 

        \ 表示插入""本身;

        nn 插入nnn(八进制)所代表的ASCII字符;

    无限循环

    无限循环语法格式:

     或者把while :改为

    for循环的几个常用写法。

    until 循环

    until 循环执行一系列命令直至条件为真停止。 until 循环与 while 循环在处理方式上刚好相反

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

     条件可为任意测试条件.

    测试发生在循环末尾,因此循环至少执行一次。

    case

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

    • 取值后面必须为单词 in,每一模式必须以右括号结束取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;
    • 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

    esac

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

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

    跳出循环

    未达到循环结束条件时强制跳出循环,Shell 使用两个命令来实现该功能:break 和 continue

    break命令

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

    continue命令

     它不会跳出所有循环,仅仅跳出当前循环。当输入大于 5 的数字时,该例中的循环不会结束,语句 echo "haha" 永远不会被执行。

    练习

    echo '' 有换行的意思

    d=$((i+2))必须要双括号,里面i+2上下文才正确。现在i+2结果是一个数值。

    写一个脚本

    (1) 提示用户输入一个字符串;

    (2) 判断:

    如果输入的是 quit,则退出脚本;

    否则,则显示其输入的字符串内容;

    三角输出

    编写 bash 脚本输出如图的三角:

    新建一个 test.sh,判断 8 4 5 三个数字的最大值

    或者

    seq: squeue  是一个序列的缩写,主要用来输出序列化的东西

    seq常见命令参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    用法:seq [选项]... 尾数
     或:seq [选项]... 首数 尾数
     或:seq [选项]... 首数 增量 尾数
    以指定增量从首数开始打印数字到尾数。
     
      -f, --format=格式     使用printf 样式的浮点格式
      -s, --separator=字符串        使用指定字符串分隔数字(默认使用: )
      -w, --equal-width    在列前添加0 使得宽度相同【自动补位】
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出

    新建 test.sh 求 100 以内所有偶数之和

  • 相关阅读:
    《Programming in Lua 3》读书笔记(十)
    《Programming in Lua 3》读书笔记(九)
    《Programming in Lua 3》读书笔记(八)
    [原]NYOJ-括号匹配-2(java)
    [原]NYOJ-字符串替换-113
    [原]NYOJ-小光棍数-458
    [原]NYOJ-公约数和公倍数 -40
    [原]NYOJ-开灯问题-77
    [原]NYOJ-数的位数-69
    [原]NYOJ-大数阶乘-28
  • 原文地址:https://www.cnblogs.com/dork/p/13835529.html
Copyright © 2020-2023  润新知