shell函数、Script检查、循环结构

6、函数
语法格式:
function func-name() {
语句组
}

任务:输入one,输出Today is Monday,输入two,输出Today is Tuesday……

1)编辑脚本:vim func01.sh
#!/bin/bash

function print() {
echo “Today is $1”
}
case $1 in
“one”)
print “Monday”
;;
“two”)
print “Tuesday”
;;
“three”)
print “Wednesday”
;;
“four”)
print “Thursday”
;;
“five”)
print “Friday”
;;
“six”)
print “Saturday”
;;
“seven”)
print “Sunday”
;;
*)
echo “You must input a number between one and seven.”
esac

在这里插入图片描述
在这里插入图片描述
2)设置权限:chmod u+x func01.sh
在这里插入图片描述

3)执行脚本
在这里插入图片描述

课堂练习:编写计算圆面积的函数并调用。

圆周率3.14是实数,要考虑脚本里如何处理实数的计算。
1)编辑脚本:vim func02.sh
#!/bin/bash

function circle_area() {
s=echo "scale=2; 3.14*$1*$1" |bc
}

read -p “r=” r
circle_area r e c h o " s = r echo "s= recho"s=s"
在这里插入图片描述
2)设置权限:chmod u+x func02.sh
在这里插入图片描述

3)执行脚本

在这里插入图片描述
补充:如何获取函数的返回值?

函数体利用return语句返回函数值,但是只能是整数。

调用函数后,利用 $? 可以获取函数的返回值。

课堂练习:编写符号函数sign(),输入正整数,返回1,输入零,返回0,输入负整数,返回-1。

1)编辑脚本:vim func03.sh

#!/bin/bash

function sign() {
if [ $1 -gt 0 ]; then
return 1
else
if [ $1 -eq 0 ]; then
return 0
else
return – -1
fi
fi
}

read -p “num=” num
sign $num
echo $?
在这里插入图片描述

2)设置权限:chmod 765 func03.sh
在这里插入图片描述

3)执行脚本:./func03.sh
在这里插入图片描述

说明:符号字节型的-1映射到无符号字节型的255,符号字节型的-2映射到无符号字节型的254,以此类推。

7、Script检查
(1)命令格式
sh [-nvx] scripts.sh
(2)选项与参数
-n:(non-execution)不执行script,仅查询语法的问题;
-v:(verbose)在执行scripts.sh前,先将scripts.sh的内容输出到屏幕上;
-x:(executed)将使用到的scripts.sh内容显示到屏幕上,这是很有用的参数; !!!

任务1:测试func02.sh是否有语法问题。

没有任何输出,表明脚本语法没有问题。

在这里插入图片描述

修改func02.sh,故意犯个语法错误:
在这里插入图片描述

再次检查脚本func02.sh的语法有没有问题:
在这里插入图片描述
可以看出,脚本运行出错,但是sh -n却无法检查出这个错误。

再次修改func02.sh
在这里插入图片描述
再次检查脚本func02.sh的语法有没有问题:
在这里插入图片描述

sh -n确实能够捕获这种类型的语法错误。

任务2:执行func03.sh之前输出脚本内容。
在这里插入图片描述

任务3:执行func03.sh,显示执行语句的流程。
在这里插入图片描述

8、循环结构
(1)条件循环

第一种条件循环:当型循环
while [ 条件 ]; do
命令组
done

执行情况:条件为真,执行循环,直到条件为假,结束循环。

任务1、每个两秒显示系统负载监测结果。

1)编辑脚本:vim while01.sh

#!/bin/bash

while true
do
uptime
sleep 2
done
在这里插入图片描述

永真循环是个死循环。

2)设置权限:chmod u+x while01.sh

在这里插入图片描述

3)执行脚本:./while01.sh
在这里插入图片描述

怎么结束这个死循环呢?很简单,按Ctrl+C即可。

任务2、计算1+2+3+……+100
1)编辑脚本:vim sum.sh
#!/bin/bash

i=1
sum=0
while [ i − l e 100 ] d o s u m = i -le 100 ] do sum= ile100]dosum=(( s u m + sum+ sum+i))
i= ( ( (( ((i+1))
done
echo “1+2+…+100=$sum”

在这里插入图片描述
2)设置权限:chmod u+x sum.sh

在这里插入图片描述
3)执行脚本:./sum.sh
在这里插入图片描述

第二种条件循环:直到型循环
until [ 条件 ]; do
命令组
done

执行情况:条件为假,执行循环,直到条件为真,结束循环。

任务:计算1+2+3+……+100

1)编写脚本:vim sum02.sh

#!/bin/bash

i=1
sum=0

until [ i − g t 100 ] d o s u m = i -gt 100 ] do sum= igt100]dosum=(( s u m + sum+ sum+i))
i= ( ( (( ((i+1))
done

echo “1+2+…+100=$sum”
在这里插入图片描述

2)设置权限:chmod u+x sum02.sh
在这里插入图片描述

3)执行脚本:./sum02.sh
在这里插入图片描述

(2)计数循环
for …
do
[语句组]
done

任务:计算1+2+……+100

1)编写脚本:vim sum03.sh
#!/bin/bash

sum=0
for i in seq -s " " 1 1 100 # start,step,stop
do
sum= ( ( (( ((sum+$i))
done

echo “1+2+…+100=$sum”
在这里插入图片描述
2)设置权限:chmod u+x sum03.sh
在这里插入图片描述

3)执行脚本:./sum03.sh

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值