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

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 "结束"

运行结果:

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

相关文章:

  • 苹果上架APP遇到提示缺少出口合规证明时应该如何处理-什么是APP加密文稿-优雅草卓伊凡
  • (每日一道算法题)翻转对
  • MySQL 锁机制详解
  • 2.企业级AD活动目录架构与设计原则实战指南
  • 程序代码篇---SQLite数据库存储信息
  • keda基于postgresql伸缩dify-api服务
  • 十亿级流量削峰实战:LinkedBlockingQueue缓冲池的工程化实现
  • 查看自己的公有ip
  • .NET 9 彻底改变了 API 文档:从 Swashbuckle(Swagger) 到 Scalar
  • 力扣55.跳跃游戏
  • FPT+SMB共享文件夹快速访问
  • 使用__attribute__((at(addr))) 固定变量到指定 Flash 地址
  • Scikit-learn 学习思维导图
  • 深度解析 Android Matrix 变换(二):组合变换 pre、post
  • 资金管理策略思路
  • 数据结构之双链表
  • 解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革
  • 高项第十四章——项目沟通管理
  • SAP SD学习笔记35 - ATP(可用性检查)的各种Pattern
  • 基于springboot的“衣依”服装销售平台(043)