Linux集群和自动化维2.3 Shell中的控制流结构

简介:

2.3 Shell中的控制流结构


Shell中的控制流结构也比较清晰,如下所示:

if ...then... else...fi语句

case语句

for循环

until循环

while循环

break控制

continue控制

工作中用得最多的就是if语句、for循环、while循环及case语句,大家可以以这几个为重点对象来学习。

if语句语法如下:

if 条件1

then

  命令1

else

  命令2

fi

if语句的进阶用法:

if 条件1

then

    命令1

      else if 条件2

    then

        命令2

else

    命令3

fi

举例说明下if语句的用法,示例如下:

#!/bin/bash

if [ "10" -lt "12" ]

then

        echo "10确实比12小"

else

        echo  "10不小于12"

fi

case语句语法如下:

case 值 in

模式1)

    命令1

    ;;

模式2)

    命令2

    ;;

*)

    命令3

    ;;

esac

case取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有的命令都开始执行直至“;;”。模式匹配符“*”表示任意字符,“?”表示任意单字符,“[..]”表示类或范围中任意字符。

case语句适合打印成绩或用于/etc/init.d/服务类脚本。以下面的脚本为例来说明下。

#!/bin/bash

#case select

echo -n "Enter a number from 1 to 3:"

read ANS

case $ANS in

1)

        echo "you select 1"

        ;;

2)

        echo "you select 2"

        ;;

3)

        echo "you select 3"

        ;;

*)

        echo "`basename $0`: this is not between 1 and 3"

        exit;

        ;;

esac

下面是稍为复杂的实例说明,/etc/init.d/syslog脚本的部分代码如下,大家注意case语句的用法,可以以此为参考编写自己的case脚本:

case "$1" in 

    start) 

        start 

        exit 0 

    ;; 

    stop) 

        stop 

        exit 0 

    ;; 

    reload|restart|force-reload) 

        stop 

        start 

        exit 0 

    ;; 

    **) 

        echo "Usage: $0 {start|stop|reload|restart|force-reload}"

        exit 1 

    ;; 

esac 

for循环语句的语法如下:

for 变量名 in 列表

do

    命令

done

若变量值在列表里,则for循环执行一次所有命令,使用变量名访问列表并且取值。命令可为任何有效的Shell命令和语句,变量名为任意单词。in列表可以包含列表、字符串和文件名,还可以是数值范围,例如{100..200},举例说明如下:

#!/bin/bash

for n in {100..200}

do

         host=192.168.1.$n

         ping -c2 $host &>/dev/null

         if [ $? = 0 ]; then

                      echo "$host is UP"

         else

                      echo "$host is DOWN"

         fi

done

while循环语句的语法如下:

while条件

do

    命令

done

在Linux中有很多逐行读取一个文件的方法,其中最常用的就是下面脚本里的方法(管道法),而且这也是效率最高、使用最多的方法,笔者最喜欢用的也是管道法。为了给大家一个直观的感受,下面将通过生成一个大文件的方式来检验各种方法的执行效率。

在脚本里,LINE这个变量是预定义的,并不需要重新定义,$FILENAME后面接系统中实际存在着的文件名。

管道方法的命令语句如下:

cat $FILENAME | while read LINE

脚本举例说明如下:

#!/bin/bash

cat test.txt | while read LINE

do

    echo $LINE

    done

}

相关文章
|
15天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
27天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
113 0
|
1月前
|
安全 Shell Linux
【Shell 命令集合 系统管理 】Linux 锁定终端 vlock命令 使用指南
【Shell 命令集合 系统管理 】Linux 锁定终端 vlock命令 使用指南
35 1
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 显示当前登录到系统的用户信息 who命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示当前登录到系统的用户信息 who命令 使用指南
43 1
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 显示目前登入系统的用户信息 w命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示目前登入系统的用户信息 w命令 使用指南
44 2
|
1月前
|
存储 Unix Shell
【Shell 命令集合 系统管理 】⭐⭐Linux 显示系统的基本信息 uname命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐Linux 显示系统的基本信息 uname命令 使用指南
34 1
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统管理 】Linux 修改用户的属性和配置 usermod命令 使用指南
【Shell 命令集合 系统管理 】Linux 修改用户的属性和配置 usermod命令 使用指南
30 1
|
1月前
|
搜索推荐 Shell Linux
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
37 2
|
1月前
|
Shell Linux 数据库
【Shell 命令集合 系统管理 】Linux 创建新用户的命令 useradd命令 使用指南
【Shell 命令集合 系统管理 】Linux 创建新用户的命令 useradd命令 使用指南
46 1
|
28天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
41 0

热门文章

最新文章