实验(九)Shell 循环结构、函数

2023-05-01 18:18:10 浏览数 (2)

1. 新建工作目录

目录命名为班级加姓名的格式,如 1banz3

参考代码:

代码语言:shell复制
mkdir 1banz3
# 切到 1banz3 目录:
cd 1banz3

2. for 循环结构

新建 for.sh 脚本,输入以下代码:

代码语言:shell复制
#!/bin/bash
for day in sunday monday tuesday wednesday thusday friday saturday
do 
	echo "the days is : $day"
done
for((i=1;i<5;i  ))
do 
	echo "the values is : $i"
done

其中,第一个for语句表示使变量day遍历in列表中的每一个值,执行循环体,也就是依次打出列表中每一种情况。

第二个for语句与C语言的用法类似,确定了变量i从1开始,每次自增1,到4结束,执行了4次循环体。Shell中,for循环结构使用的是双圆括号。

解释运行脚本,参考运行结果如下:

代码语言:text复制
the days is : sunday
the days is : monday
the days is : tuesday
the days is : wednesday
the days is : thusday
the days is : friday
the days is : saturday
the values is : 1
the values is : 2
the values is : 3
the values is : 4

3. while 循环结构

新建 while.sh 脚本,输入以下代码:

代码语言:shell复制
#!/bin/bash
n=1
while [ "$n" -lt 10 ]
do 
	echo $n
	n=$((n 2))
done

while循环使用了条件测试语句作为循环条件,变量 n<10 时重复循环体语句,也就是打出n的当前值,并随后令 n=n 2

解释运行脚本,参考运行结果如下:

代码语言:text复制
1
3
5
7
9

4. until 循环结构

新建 until.sh 脚本,输入以下代码:

代码语言:shell复制
#!/bin/bash
read -p "press y/Y to stop..." input
until [ "$input" = "Y" -o "$input" = "y" ]
do 
	read -p "error input, please try again..." input
done
echo "stop here"

在条件测试语句中,比较字符串可以简单的使用等号作为运算符,需要注意的是等号和左右字符串需要用空格隔开。

until 表示判断结果为true(也就是退出状态为0)时,退出循环,否则重复循环体语句。

解释运行脚本,参考运行结果如下:

代码语言:text复制
press y/Y to stop...1
error input, please try again...2
error input, please try again...3
error input, please try again...x
error input, please try again...y
stop here

5. break 和 continue

新建 BreakContinue.sh 脚本,输入以下代码:

代码语言:shell复制
#!/bin/bash
i=1
for day in Mon Tue Wed Thu Fri
do 
	echo "Weekday $((i  )):$day"
	if [ $i -eq 3 ]; then
		break
	fi
done
i=1
for day in Mon Tue Wed Thu Fri Sat Sun
do 
	echo -n "Day $((i  )):$day"
	if [ $i -eq 7 -o $i -eq 8 ]; then
		echo "(WEEKEND)"
		continue
	fi
	echo "(weekday)"
done

第一个for循环中,变量i值为3时,执行break语句退出循环。

第二个for循环中,变量i值7或8时,输出(WEEKEND),执行continue,跳过continue下方的语句,直接进入下一次循环。

解释运行脚本,参考运行结果如下:

代码语言:text复制
Weekday 1:Mon
Weekday 2:Tue
Day 1:Mon(weekday)
Day 2:Tue(weekday)
Day 3:Wed(weekday)
Day 4:Thu(weekday)
Day 5:Fri(weekday)
Day 6:Sat(WEEKEND)
Day 7:Sun(WEEKEND)

6. 函数

新建 func.sh 脚本,输入以下代码:

代码语言:shell复制
#!/bin/bash
function func()
{
	if [ $# -eq 2 ]
	then
		x=$(($1 $2))
	else
		echo "The number of parameters is not correct"
	fi
	echo "$1 $2=$x"
}
func 10 90

条件测试语句中,$#是Shell预定义变量,表示运行命令时的参数个数,当参数个数为2时,测试结果为true,执行then中的语句,令 x=参数1 参数2 ;否则,测试结果为false,执行else中的语句,打印一行提示信息。

解释运行脚本,参考运行结果如下:

代码语言:text复制
10 90=100

也可以修改脚本中最后一行的函数调用语句,使其计算命令后跟的两个参数的值:

代码语言:shell复制
func $1 $2

解释运行脚本,参数1和2分别是9999和8888,运行结果如下:

代码语言:text复制
9999 8888=18887

0 人点赞