Liunx-----Shell脚本流程控制--顺序、选择、循环

.shell 程序流程控制结构三大结构
1)顺序结构
2)选择结构
3)循环结构

一、顺序结构的定义

顺序结构的程序设计是最简单的一种结构,它的执行顺序是自上而下,依次执行。

顺序结果的编写流程以及注意事项

1.顺序结构程序编写流程
1)编辑脚本文件,以#!/bin/sh 开头;

#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是此解释此脚本的shell的路径。其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本。

2)编写业务程序,顺序编写语句块1、语句块2、语句块3 。

2.掌握常见的系统变量的含义:
这些系统变量通常用与命令行参数的获取。

$0

当前脚本的文件名

$n

传递给脚本或函数的参数。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 语句语法格式:

if [     ]
then
    command1 
    command2
    ...
    commandN 
fi

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 
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

输出结果:

两个数字相等!

for 循环

与其他编程语言类似,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 esac控制结构

case语句适用于需要进行多重分支的应用情况,它也是选择结构中常用的一种控制结构。

case分支语句的格式如下

case $变量名 in          # 严格掌握其语法 
 模式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
今天是星期三

 

While循环结构

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

while read 循环使用

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

continue 、break 使用

1.循环中有两种类型的控制break和continue
这是一种无条件的流程控制,强制程序跳出当前的循环,或跳出当前循环继续执行下一个循环。

break命令,会退出当前的循环并且将控制权传递到本循环后面的第一个命令

continue命令,当在程序执行过程中遇到这个命令,就会忽略本次循环中剩余的命令,将控制权交给循环的顶部

 

posted @ 2018-11-17 15:44  时间绝境  阅读(1608)  评论(0编辑  收藏  举报