当前位置: 首页 > article >正文

Linux学习[5]---shell脚本之bash脚本---判断选择循环

文章目录

  • 前言
  • 1. 判断
    • 1.1 值判断
    • 1.2 文本判断
  • 2. 选择
    • 2.1 if
    • 2.2 if else
    • 2.2 case
  • 3. 循环
    • 3.1 while
    • 3.2 do while
  • 4.一些注意点

前言

前面几节写了bash的一些基本概念,但是在程序中涉及到的选择判断之类的还没有写,所以涉及到的函数都是非常简单的输出样例。高级一点的函数都会有很多选择判断以及循环,因此这一小节进行记录。


1. 判断

判断语句通常用在选择语句和循环语句的条件中,但在linux中除了这个功能,还有其他作用。
linux中判断使用的命令是test,下面是详细用法。

1.1 值判断

判断两个变量A,B中,A是否大于B。
test A -gt B; echo $?
这里gt=greater than,后面紧跟着的echo是为了打印成立与否,类似于bool类型返回值:true or false

除了例子中的大于,那么类似的就会有小于,等于,大于等于,小于等于,不等于。下面列个表方便对比,需要判断的时候只需要把上面例子中的-gt换成你想要判断的条件-xx

逻辑符号指令
-gt
-lt
=-eq
-ge
-le
!=-ne

1.2 文本判断

bash中的变量之类的大多以文本进行保存,下面是文本的判断。
以判断abc和asd是否相等,不等,字典序中是否大于,小于列表。

判断符示例
test abc > asd; echo $?
test abc < asd; echo $?
=test abc = asd; echo $?
!=test abc != asd; echo $?

对文件状态进行逻辑判断

状态判断符示例
存在-etest -e a.out; echo $?
存在且为普通文件-ftest -f a.txt; echo $?
存在且为目录文件-dtest -d mydir; echo $?
存在且是软链接-Ltest -L a.out; echo $?
可读-rtest -r a.txt; echo $?
可写-wtest -w a.txt; echo $?
可执行-xtest -x a.sh; echo $?

2. 选择

在C语言中选择语句一般就几种:

  • if
  • if else
  • switch+case

在bash中也一样,只不过写起来语法上稍有些不同,下面举几个例子,应该就能看明白啥意思了。

2.1 if

单 if 的用法为:if[逻辑判断]+then+fi。下面脚本使用了最简单的if结构。关键字if后面跟着[],里面是一个逻辑表达式。这个逻辑表达式就是if结构的条件。如果条件成立,那么if将执行then到fi之间包含的语句,我们称之为隶属于if的代码块。如果条件不成立,那么隶属于if的代码块不执行。

#!/bin/bash
if [$name = "Edwinwzy"]
then
	echo "I'm chengchei"
	echo "Edwinwzy is me"
fi

2.2 if else

if判断失败,那么执行else。else放在fi之前,then之后

#!/bin/bash
if [$name = "Edwinwzy"]
then
	echo "I'm chengchei"
	echo "Edwinwzy is me"
else
	echo "I'm not chegnchei"
fi

除了简单的变量比较指令,我们也可以写文本判断指令,把它放在if的条件判断里面,例如下面代码是判断文件是否存在。

#!/bin/bash
filename=$name
if [ -e $filename]
then
	echo "Exist"
else
	echo "Empty"
fi

if与else还可以进行各种if嵌套,下面举个简单例子:

#!/bin/bash
if [$name = "Edwinwzy"]
then
	echo "I'm chengchei"
	echo "Edwinwzy is me"
else
	if [$name = "chengchei"]
	then
		echo "I'm chegnchei"
	else
		echo "I'm not chegnchei"
	fi
fi

2.2 case

在C语言中switch接着case,但在bash使用类似于switch的功能,写法上稍有些不同。
下面是一个例子,其中*是通配符,表示任何文本都可以触发的情况。

#!/bin/bash
name="Edwinwzy"
case $name in
chengchei)
	echo "1"
;;
Edwinwzy)
	echo "2"
;;
*)
	echo "3"
;;
esac

3. 循环

C语言中的循环有while;do while;for等,bash中也类似,下面是具体介绍。

3.1 while

下面这个程序就是判断变量A是否大于变量B,如果成立则变量A自减1,最后A等于B。

#!/bin/bash
varA=10
varB=8
while [ $varA -gt $varB ]
do
	varA=$(($varA-1))
	echo "varA minus one"
	echo "now the varA is $varA"
done

echo "now A is equal to B"

3.2 do while

下面的程序为求和1~10,不包括5

#!/bin/bash
cuount=0
varA=1
while :
do
	if [ $varA -gt 10 ]
	then
		#下面的if嵌套没有意义,单纯为了用一下continue
		if [ $var -eq 5 ]
		then
			continue
		fi
		break
	fi
	count=$(($count+$varA))
	varA=$(($varA+ 1))
done
echo $count

4.一些注意点

本小节的判断,选择,循环的语句,使用[]时,在逻辑语句中与[]两头要有空格,例如:if[$varA -eq 5]这里$和5的左边和右边分别都有中括号,这里如果不加空格,就会报错。正确的写法是:if[ $varA -eq 5 ]


澄澈i
用简单的语言记录自己走过的技术路


http://www.kler.cn/a/8143.html

相关文章:

  • 【文档搜索引擎】搜索模块的完整实现
  • 串口通信控制LED灯
  • 汽车IVI中控开发入门及进阶(四十):FDK AAC音频编解码软件库
  • 一篇文章学会HTML
  • 2.6 网络面试问题
  • Android获取sim卡频段信息
  • 高效自动化测试框架-优秀实践03-使用SeleniumGrid
  • unity,欧拉角
  • HashMap源码分析小结
  • python好玩的短代码
  • 不负期待,载誉收官 | 迅镭激光2023ITES深圳展圆满落幕!
  • 轻轻松松编译 Jmeter 源码,再也不求人
  • Leetcode.130 被围绕的区域
  • 继承(C++)
  • Spring-aop面向切面
  • Tomcat使用https配置实战
  • chatGPT中国入口-ChatGPT评论文章-ChatGPT怎么用
  • 多线程冲突处理方法,锁
  • 首届“兴智杯”产业赛收官,文心大模型助推产业创新
  • 量化注意事项和模型设计思想
  • rsync远程同步实现快速、安全、高效的异地备份
  • Spring 之循环依赖
  • 【计算机网络-网络层】路由选择协议
  • Redission分布式锁
  • vue3脚手架Vite
  • ChatGPT常用prompts汇总