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

Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证

目录

1.if 控制语句

1.1 if 语句格式

1.2 程序验证

2.case语句

2.1case语句格式

2.2程序验证

2.2.1 终端先执行程序,在输入一个数

2.2.2 终端执行程序时同时输入一个预设变量

2.2.3 case带有按位或运算和通配符匹配

3.for语句

3.1for语句格式

3.2程序验证

3.2.1 for语句形式1-变量求和

3.2.2 for语句形式2-循环输出变量

3.2.3 for语句形式2-执行ls命令,循环判断该目录下的文件类型

(1)程序遍历输出该目录下的文件

(2)程序遍历判断该目录下的所有文件类型

4.while语句

4.1 while语句格式

4.2 程序验证

5.until语句

5.1 until语句格式

5.2 程序验证

6.break、continue

6.1 break

6.2 continue


1.if 控制语句

1.1 if 语句格式

格式一:
if [ 条件 1 ]; then
执行第一段程序
else
执行第二段程序
fi
格式二:
if [ 条件 1 ]; then
执行第一段程序
elif [ 条件 2 ];then
执行第二段程序
else
执行第三段程序
fi
注意:
1. [ 条件 ]  #条件与 [ ]要有空格
2.   if [ 条件 1 ]; then 也可以分为两行写,不用加 ;
        if [ 条件 1 ]
        then
3.需添加结束符号 fi

1.2 程序验证

程序:

#!/bin/bash

echo "please input a number >>> "
read NUM #读取键盘输入的数字

#注意:赋值时,等号两边不能加空格
#      []里面存放表达式时必须加空格

echo " 判断 NUM 是否大于 50 "
#一般形式,程序只判断大于50的情况
if [ $NUM -gt 50 ];then
	echo "NUM > 50"
fi  # 结束标志

echo " ------ "
#程序判断大于、小于等于50的情况
echo " 判断 NUM 是否大于 50 "
if [ $NUM -gt 50 ]
then
	echo "NUM > 50"
else
	echo "NUM <= 50"
fi

echo " 阶梯形式: "

#阶梯形式,只执行一个条件
if [ $NUM -gt 50 ]
then
	echo "NUM > 50"
	
elif [ $NUM -lt 50 ]
then
	echo "NUM < 50"
	
else
    echo "NUM = 50"
fi

echo " 嵌套形式: "
#嵌套形式,
if [ $NUM -gt 50 ]
then
	echo "NUM > 50"
	if [ $NUM -gt 100 ] #若NUM大于50,在判断和100的关系
	then
		echo "NUM > 100"
	else
		echo "NUM <= 100"
	fi
elif [ $NUM -eq 50 ]
then
	echo "NUM = 50"
else
	echo "NUM < 50"
	if [ $NUM -gt 30 ] #若NUM小于50,在判断和30的关系
	then
		echo "NUM > 30"
	else
		echo "NUM <= 30"
	fi
fi

运行结果:

2.case语句

2.1case语句格式

(1)shell case语句
case $变量名称 in
"第一个变量内容")
程序段一
;;  #当前语句结束符,和C语言break一样
"第二个变量内容")
程序段二
;;
*) 其它程序段
exit 1        #退出程序
esac         #case语句结束标志,和case匹配
(2)C语言case语句
switch(num)
{
case 1:执行语句1; break;
case 2:执行语句2; break;
case 3:执行语句3; break;
...
default:执行语句x; break; //以上case 语句未执行,执行该语句
}

2.2程序验证

2.2.1 终端先执行程序,在输入一个数

程序:

#!/bin/bash

echo "This script will print your choice"
read num #读取键盘输入的数字

case "$num" in
	"1")
		echo "your choice is one"
		;;  #当前语句结束符
	"2")
		echo "your choice is two"
		;;
	"3")
		echo "Your choice is three"
		;;
	*) #以上case 语句未执行,执行该语句
		echo "Error Please try again!"		
		exit 1 #退出,不会打印下面的 hello world
		;;
esac #case语句结束标志,和case匹配

echo "hello world"

运行结果;

2.2.2 终端执行程序时同时输入一个预设变量

终端执行程序时同时输入一个预设变量,该预设变量在程序中直接使用。

程序:

#!/bin/bash

# 终端输入: ./xx.sh 2
# 上述输入的 ./xx.sh为预设变量 $0, 2为预设变量 $1
echo "This script will print your choice"

case "$1" in
	"1")
		echo "your choice is one"
		;;  #当前语句结束符
	"2")
		echo "your choice is two"
		;;
	"3")
		echo "Your choice is three"
		;;
	*) #以上case 语句未执行,执行该语句
		echo "Error Please try again!"		
		exit 1 #退出,不会打印下面的 hello world
		;;
esac #case语句结束标志,和case匹配

echo "hello world"

运行结果:

2.2.3 case带有按位或运算和通配符匹配

程序:

#!/bin/bash

echo "Please input your choice:"
read choice

case "$choice" in
	 #输入 y Y yes Yes YES 5个中的一个,都会输出下面语句
	y | Y | yes | Yes | YES)
	echo "It's right"
	;;
	
	# *是一个通配符,可以匹配任意字符并且数量不限
	# N* 只要是N开头的,都会执行下面的命令
	N* | n*)
	echo "It's wrong"
	;;
	
	*) #其他条件
	echo "Error Please try again!"
	exit 1
esac

运行结果:

3.for语句

3.1for语句格式

形式一:
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
初始值:变量在循环中的起始值
限制值:当变量值在这个限制范围内时,就继续进行循环
执行步阶:每作一次循环时,变量的变化量
declare 是 bash 的一个内建命令,可以用来声明 shell 变量、设置变量的属性。declare 也可以写作 typeset。
declare -i s 代表强制把 s 变量当做 int 型参数运算。
形式二:
for var in con1 con2 con3 ...
do
程序段
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
...
当in后面所有的值都赋值完毕并执行命令后,循环结束
注意:
for语句变量不加 $ 符号

3.2程序验证

3.2.1 for语句形式1-变量求和

在shell中,变量默认是字符串类型,未初始化时为null(空)。但在算术运算中,未初始化的变量被视为0。如果使用declare -i声明变量为整数,但未赋值,变量在算术运算中视为0,但直接echo可能显示为空。因此,严格来说,整数类型的变量默认值并不是0,但在算术表达式中会被当作0处理。

程序:

#!/bin/bash

#声明sum变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i sum 
typeset -i sum1

# for语句变量不加 $ 符号
for (( i=1; i<=100; i++ ))
do
	sum=sum+i
done

echo "The sum result is $sum"

for (( i=1; i<=100; i++ ))
do
	sum1=sum1+i
done
echo "The sum1 result is $sum1"
运行结果:

3.2.2 for语句形式2-循环输出变量

程序:

#!/bin/bash

#注意:for循环后的变量之前不能加$

#for var in con1 con2 con3 ...
#第一次循环时,$var的内容为con1
#第二次循环时,$var的内容为con2
#第三次循环时,$var的内容为con3
#...
#当in后面所有的值都赋值完毕并执行命令后,循环结束

for i in 1 2 3 4 5 
do
	echo $i
done
echo "结束"

运行结果:

3.2.3 for语句形式2-执行ls命令,循环判断该目录下的文件类型

(1)程序遍历输出该目录下的文件

程序:

#!/bin/bash

for name in `ls`
do
	echo " $name"
	echo " ---"
done

运行结果:

(2)程序遍历判断该目录下的所有文件类型

程序:

#!/bin/bash

for name in `ls`
do
	if [ -f $name ];then # -f 普通文件
		echo "$name is file"
	elif [ -d $name ];then  # -d 目录文件
		echo "$name is directory"
	else
		echo "其他类型文件"
	fi
done

echo "结束"

运行结果:

与终端执行ll命令判断结果一致。

4.while语句

4.1 while语句格式

while [ condition ]
do
程序段
done
当condition 条件成立 的时候 进入while循环 ,直到condition不成立时才退出循环。
注意: [ condition ] ,condition 两边要留空格

4.2 程序验证

程序:

#!/bin/bash

#声明 num变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i num
typeset -i s #声明s变量是一个整数变量

echo "num= $num" #未赋值,算数运算默认为0
while [ "$num" != "101" ] #求1~100的累加和
do
	# echo "num= $num"
	s+=num;
	num=num+1;
done

echo "The count is $s"
echo "结束"

运行结果:

5.until语句

5.1 until语句格式

until [ condition ]
do
程序段
done
这种方式 与while恰恰相反 ,当condition 条件成立(为真) 的时候 退出循环
当condition 条件不成立(为假) 的时候 执行循环

5.2 程序验证

程序:

#!/bin/bash

#声明 num变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i num
typeset -i s #声明s变量是一个整数变量

echo "num= $num" #未赋值,算数运算默认为0
#until循环,是循环条件不成立,执行命令体,如果条件为真,则循环结束
#until [ "$num" = "101" ] #求1~100的累加和,num等于101时,退出循环
until [ "101" = "$num" ] #求1~100的累加和,num等于101时,退出循环
do
	# echo "num= $num"
	s+=num;
	num=num+1;
done

echo "The count is $s"
echo "结束"

运行结果:

6.break、continue

(1)break命令
break命令允许跳出循环。
break 通常在进行一些处理后 退出循环 或case 语句
(2)continue命令
continue 命令类似于break 命令。
只有一点重要差别,它 不会整个跳出循环 只是跳过本次循环 步骤。

6.1 break

程序:
#!/bin/bash

for ((num=1; num<=10; num++))
do	
	if [ $num -eq 5 ] #判断num是否等于5,等于5时退出整个循环
	then
		#break退出整个循环
		break
	fi

	echo "num = $num"
done

echo "结束"

运行结果:

6.2 continue

程序:
#!/bin/bash

for ((num=1; num<=10; num++))
do	
	if [ $num -eq 5 ] #判断num是否等于5,等于5时退出本次循环,继续执行下次循环
	then
		#continue退出本次循环,当执行到continue的位置时,
		#循环下方的代码不在执行,但是接着下个循环继续执行
		continue
	fi

	echo "num = $num"
done

echo "结束"

运行结果:

相关文章:

  • 使用Ollama(自定义安装位置)与RagFlow构建本地知识库
  • 跟着StatQuest学知识07-张量与PyTorch
  • 【leetcode hot 100 34】在排序数组中查找元素的第一个和最后一个位置
  • LLM-01-第一章-预训练/神经网络的激活函数(一)概述
  • 信息安全和病毒防护——非对称加密和对称加密
  • 在 SaaS 应用上构建 BI 能力的实战之路
  • Ciallo~ (∠・ω< )⌒★
  • 【redis】主从复制:单点问题、配置详解、特点详解
  • 阻塞队列:原理、应用及实现
  • 第十六届蓝桥杯康复训练--8
  • 学习记录-vue2,3-vue实现tab栏
  • 齿轮啮合频率计算及其频谱图
  • [C语言基础] 第2章 算法的概念
  • kube-score K8S Yaml静态代码分析工具详解
  • 【申论】规范表达-科技创新类
  • 【Python自动化测试】——自动化测试基础
  • ABC392题解
  • 力扣算法ing(36 / 100)
  • 神经网络知识点整理
  • 中间件漏洞—Apache
  • 大一女生头孢过敏输液室呼救无医护响应,自行拔针仍不幸身亡
  • 光明日报头版评论:让投身西部成为青春潮流
  • 马上评|提供情绪价值,也是文旅经济的软实力
  • 结束北京队与总决赛十年之痒的,为何会是一度被群嘲的许利民
  • 跳水世界杯总决赛:程子龙/朱子锋夺男子双人10米台冠军
  • 党旗下的青春|赵天益:少年确定志向,把最好的时光奉献给戏剧事业