Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)

简介:

bash脚本的书写规范简介

看本文需要了解的脚本撰写习惯:bash

开头顶格写#!紧接着写解释器路径/bin/bash

由于bash属于脚本语言,脚本语言的运行方式

解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行

Linux中的脚本解释器有:zsh,csh,bash,tsh众多shell,不过bash最常用。

第一行写完之后,就可以直接写代码。不过为了便于他人阅读通常会增加如下行:

第二行:#版本信息

第三行:#作者与联系方式

第四行:#版权宣告方式

第五行:#History

一般会增加上面4行注释信息。

除第一行#外其余行只要#后内容脚本统统不识别,因此可用#作为注释使用

                                                                  实验环境CentOS7.2


bash脚本语句执行顺序

bash脚本中分为顺序执行选择执行循环执行这大致三类执行顺序。

顺序执行,就是从上到下,从左到右的顺序逐一读取命令。

选择执行,根据一些条件的真伪情况分别执行相应的操作。

循环执行,根据限制条件及循环体,反复执行,直到不符合循环条件退出循环为止。


本文介绍较为简单的选择执行语句


选择执行语句

选择执行语句大致分为if语句case语句

………………………………………………………………………………………………………………………

if语句

if语句又分为if单分支语句if双分支语句if多分支语句

case可以认为是if多分支语句的一个特例,因为其格式更加精简所以在遇到这种特例会使用case。

………………………………………………………………………………………………………………………

if单分支语句

单分支:

if CONDITION; then

    if-true

fi


CONDITION:可以是测试条件,可以是命令执行结果,如果CONDITION内容为真,则进入then阶段,之后进行相应操作,这个执行操作可以是命令,也可以是其他执行语句。也就是这里可以进行语句的嵌套

该操作结束后,使用fi进行if语句的结尾动作

………………………………………………………………………………………………………………………

下面举个简单例子:写一个脚本,判断1与2的大小,1<2则显示:2 is bigger 

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost  test ] # cat >> if11 << EOF
#!/bin/bash
# This script is a value test for 1 and 2
#2016-0828 author chawan
#
if  [ 1 -lt 2 ]; then
>      echo  "2 is bigger"
fi
> EOF
[root@localhost  test ] # chmod +x if11
[root@localhost  test ] # ./if11 
2 is bigger

………………………………………………………………………………………………………………………

if双分支语句

双分支:

   if CONDITION; then

    if-true

   else

    if-false

   fi

双分支语句跟单分支语句不同的地方在于else后面接的是CONDITION为假时的情况

同理else后面可以跟命令也可以跟语句嵌套。最后以fi结束if语句

………………………………………………………………………………………………………………………

示例:比较两个数的大小,如果第一个数大于等于第二个数则显示:First number is bigger,否则显示:Second number is bigger。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost  test ] # cat if12
#!/bin/bash
# Test two number who is bigger
#2016-0828 author chawan
#
[ $ # -ne 2 ] && echo "Please give two number !" && exit 1
if  [ $1 - ge  $2 ]; then
     echo  "First number $1 is bigger"
else
     echo  "Second number $2 is bigger"
fi
[root@localhost  test ] # chmod +x if12
[root@localhost  test ] # ./if12
Please give two number !
[root@localhost  test ] # ./if12 3 9
Second number 9 is bigger

………………………………………………………………………………………………………………………

if多分支语句

多分支:

if CONDITION1; then

   if-true

elif CONDITION2; then

   if-ture 

elif CONDITION3; then

   if-ture 

...

esle

    all-false

fi

多分支语句跟双分支并没有什么大的区别,只是通过elif多了几个选择判断。只要理解了if双分支的使用,那么if的多分支就不成问题。

………………………………………………………………………………………………………………………

示例:输入一个文件的绝对路径判断该文件的类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#version 1.0
#auther chawan 
#date:20160905
#根据提示信息输入相应内容
read  -p  "Please give a path of file :"  Path
#判断输入内容是否为空,为空则提示
test  -z $Path &&  echo  "No path"  &&  exit  1
#判断输入的路径对应的文件是否存在,若不存在则提示路径错误并退出
test  -e $Path &&  echo  "Wrong path "  &&  exit  2
#多分支选择语句,判断是否为普通文件,目录文件及链接文件,其他类型表示为不识别。
if  [ -f $Path ]; then
     echo  "$Path is common file" 
elif  [ -d $Path ]; then
     echo  "$Path is diretory file"
elif  [ -h $Path ]; then
     echo  "$Path is link file"
else 
     echo  "Unknown file type"
fi

下面输入几个文件路径进行测试

1
2
3
4
5
6
7
8
9
10
11
12
[root@centos7  test ] # sh if_3 
Please give a path of  file  :/
/ is diretory  file
[root@centos7  test ] # sh if_3 
Please give a path of  file  : /test/t1
/test/t1  is common  file
[root@centos7  test ] # sh if_3 
Please give a path of  file  :
No path
[root@centos7  test ] # sh if_3 
Please give a path of  file  : /e
Wrong path

………………………………………………………………………………………………………………………

case语句

case语句:特点可以理解为特殊的if多分支语句

它在特定情况下使用会简化脚本。

case语句格式

case 变量引用 in

part1

    分支1

    ;;

part2

    分支2

    ;;

...

*)

    默认分支

    ;;

esac

case中的变量引用内容需要等于in分支中的part#部分,也就是出现等值比较时使用case效果会很好。下面举一个例子。

………………………………………………………………………………………………………………………

示例:输入一个文件的绝对路径判断该文件的类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
#version 1.0
#auther chawan
#date:20160905
read  -p  "Please give a path of file :"  Path
test  -z $Path &&  echo  "No path"  &&  exit  1
test  -e $Path &&  echo  "Wrong path "  &&  exit  2
#取文件类型符:d,-,l,p,s,b,c
type_file=` ls  -l -d $Path |  cut  -c1`
case  $type_file  in
-)
   echo  "$Path is common file"
   ;;
d)
   echo  "$Path is diretory file" 
   ;;
l)
   echo  "$Path is link file"
   ;;
b)
   echo  "$Path is block file"
   ;;
c)
   echo  "$Path is char file"
   ;;
s)
   echo  "$Path is socket file"
   ;;
p)
   echo  "$Path is pipe file"
   ;;
*)
   echo  "Unknown file type"
   ;;
esac

下面输入几个文件路径进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@centos7  test ] # sh case_1
Please give a path of  file  : /etc/fstab
/etc/fstab  is common  file
[root@centos7  test ] # sh case_1
Please give a path of  file  : /dev/sdb
/dev/sdb  is block  file
[root@centos7  test ] # sh case_1
Please give a path of  file  : /usr
/usr  is diretory  file
[root@centos7  test ] # sh case_1
Please give a path of  file  : /ee
Wrong path 
[root@centos7  test ] # sh case_1
Please give a path of  file  :
No path




小结

脚本中的一些注意事项:

脚本中不识别命令别名以alias设定的别名在脚本中都不识别


选择语句总结:

if选择:if单分支,if双分支,if多分支

case选择:特殊的if多分支,在等值比较情况下使用效果较好,简化代码量


选择语句的作用:

在脚本执行时按触发的条件进入相应的语句执行。


什么时候使用选择语句?

通常就是需要对一些问题分情况讨论时用,这个需要在写的过程中细细体会。










本文转自 紫色的茶碗 51CTO博客,原文链接:http://blog.51cto.com/chawan/1846403,如需转载请自行联系原作者
目录
相关文章
|
6天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
60 32
|
16天前
|
存储 Linux 网络安全
linux应急响应检查脚本
通过这个脚本,可以快速收集系统的关键信息,有助于在发生问题时进行及时的应急响应和分析。
74 34
|
2月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
3月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
Shell Linux
Linux 判断上一个语句是否执行成功
shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败。 结合if-else语句实现判断上一个命令是否执行成功。
8556 0
|
10天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用
|
3月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
353 8
|
3月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1141 6
|
23天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
35 11