虽千万人,吾往矣

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 发出警告声; 

    \b 删除前一个字符; 

    \c 最后不加上换行符号; 

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

    \n 换行且光标移至行首; 

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

    \t 插入tab; 

    \v 与\f相同; 

    \\ 表示插入"\"本身;

    \nnn 插入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=字符串        使用指定字符串分隔数字(默认使用:\n)
  -w, --equal-width    在列前添加0 使得宽度相同【自动补位】
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

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

 

 

posted @ 2020-11-14 17:00  遥望星空脚踏实地  阅读(167)  评论(0编辑  收藏  举报