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

本文深入介绍了Linux bash脚本中的选择执行语句,包括if单分支、双分支和多分支语句以及case语句的使用方法,通过实例解析了如何根据条件执行不同操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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单分支语句

单分支:

ifCONDITION; then

if-true

fi

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

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

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

下面举个简单例子:写一个脚本,判断1与2的大小,1<2则显示:2 is bigger[root@localhost test]# cat >> if11 <

> #!/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双分支语句

双分支:

ifCONDITION; then

if-true

else

if-false

fi

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

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

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

示例:比较两个数的大小,如果第一个数大于等于第二个数则显示:First number is bigger,否则显示:Second number is bigger。[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多分支语句

多分支:

ifCONDITION1; then

if-true

elifCONDITION2; then

if-ture

elifCONDITION3; then

if-ture

...

esle

all-false

fi

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

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

示例:输入一个文件的绝对路径判断该文件的类型。#!/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

下面输入几个文件路径进行测试[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效果会很好。下面举一个例子。

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

示例:输入一个文件的绝对路径判断该文件的类型。#!/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

下面输入几个文件路径进行测试[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多分支,在等值比较情况下使用效果较好,简化代码量。

选择语句的作用:

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

什么时候使用选择语句?

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值