.shell 程序流程控制结构三大结构
1)顺序结构
2)选择结构
3)循环结构shell
1、顺序结构的定义 编程
顺序结构的程序设计是最简单的一种结构,它的执行顺序是自上而下,依次执行。bash
1.顺序结构程序编写流程
1)编辑脚本文件,以#!/bin/sh 开头;编程语言
#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是此解释此脚本的shell的路径。其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,咱们能够用各类各样的解释器来写对应的脚本。函数
2)编写业务程序,顺序编写语句块一、语句块二、语句块3 。oop
2.掌握常见的系统变量的含义:
这些系统变量一般用与命令行参数的获取。spa
$0命令行 |
当前脚本的文件名设计 |
$ncode |
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# |
传递给脚本或函数的参数个数。 |
$* |
传递给脚本或函数的全部参数。 |
$@ |
传递给脚本或函数的全部参数。被双引号(" ")包含时,与 $* 稍有不一样,下面将会讲到。 |
$? |
上个命令的退出状态,或函数的返回值。 |
$$ |
当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
$0 |
当前脚本的文件名 |
注意:有时候须要获取到参数的个数,以及全部参数的内容。
变量名 |
说明 |
变量名 |
说明 |
HOME |
当前用户主目录 |
PWD |
用户的当前目录 |
PATH |
命令搜索路径 |
UID |
当前用户标识符 |
LOGNAME |
用户登陆名 |
TERM |
终端的类型 |
PS1 |
第一命令提示符,是#或$ |
SHELL |
用户的shell类型以及路径 |
PS2 |
第二命令提示符,默认是> |
HISFILE |
存储历史命令的文件 |
1.交互式输入与输出
read 命令读取标准输入设备的一行,到新行换行符前的字符做为终止,把读到的字符赋值给变量。
能够结合echo 一块儿实现读取并输出的功能。
2.顺序结构交互式输入与输出程序演练
给出输入提示的read用法
read -p “提示信息:” myaddr
1.选择结构的定义
选择结构是程序中带有判断的一种逻辑结构,只有符合必定的条件,程序体才会被执行。
2.Linux shell 选择结构分类
1)if-then控制结构
2)case–esac控制结构
if 语句语法格式:
if [ ] then command1 command2 ... commandN fi
if else 语法格式:
if condition then command1 command2 ... commandN else command fi
if else-if else 语法格式:
if condition1 then command1 elif condition2 then command2 else commandN fi
a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi
输出结果:
a 小于 b
if else语句常常与test命令结合使用,以下所示:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
输出结果:
两个数字相等!
与其余编程语言相似,Shell支持for循环。
for循环通常格式为:
for i in $(seq 1 10) do echo $i done
for io in A B C D E F H K O do echo $io done
for ((m=1; $m<=12; m++ )) do echo $m done
case语句适用于须要进行多重分支的应用状况,它也是选择结构中经常使用的一种控制结构。
case分支语句的格式以下:
casein# 严格掌握其语法 $变量名
1# 右括号不能省(”可比较相等”) 模式)
1命令序列
# 两分号不能省;;
2模式)
2命令序列
;;
*)
默认执行的命令序列
;;
esac#结尾反写case表示结束。
#!/bin/bash read -p "请输入数字(1-7):" a case $a in 1) echo "今天是星期一" ;; 2) echo "今天是星期二" ;; 3) echo "今天是星期三" ;; 4) echo "今天是星期四" ;; 5) echo "今天是星期五" ;; 6) echo "今天是星期六" ;; 7) echo "今天是星期日,休息日!" ;; *) echo "请按规范输入指定数字" ;; esac
输出结果
[root@localhost ~]# ./stt.sh 请输入数字(1-7):4 今天是星期四 [root@localhost ~]# ./stt.sh 请输入数字(1-7):8 请按规范输入指定数字 [root@localhost ~]# ./stt.sh 请输入数字(1-7):1 今天是星期一 [root@localhost ~]# ./stt.sh 请输入数字(1-7):3 今天是星期三
rt=1 while [ $rt -le 10 ] do echo "the script is running..." let rt++ sleep 3 done
i=1 while ((i<=10)) do echo $i let "i++" done
1.while read 变量 能够按行读入
一直到全部行都读完,才退出循环,在实际工做中,会常常采用这种循环结构,进行数据的处理。
语法格式:
cat file.txt |while read line
# line能够换个名字,此处的cat也能够是一个产生若干行的命令,如 find
do
….
done
须要注意的是while read line循环体中的变量,退出当前循环后,会被销毁,因此若要二次使用循环体中的变量,则须要采用其余办法。
由于管道后的while loop是sub shell ,因此里面的变量在执行完成后,须要销毁。
cat aa.txt | while read isop do echo $isop done
1.循环中有两种类型的控制break和continue
这是一种无条件的流程控制,强制程序跳出当前的循环,或跳出当前循环继续执行下一个循环。
break命令,会退出当前的循环而且将控制权传递到本循环后面的第一个命令。
continue命令,当在程序执行过程当中遇到这个命令,就会忽略本次循环中剩余的命令,将控制权交给循环的顶部。