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
课堂练习:编写计算圆面积的函数并调用。
圆周率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 $?
说明:符号字节型的-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的语法有没有问题:
可以看出,脚本运行出错,但是sh -n却无法检查出这个错误。
再次修改func02.sh:
再次检查脚本func02.sh的语法有没有问题:
sh -n确实能够捕获这种类型的语法错误。
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
怎么结束这个死循环呢?很简单,按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= i−le100]dosum=(( s u m + sum+ sum+i))
i= ( ( (( ((i+1))
done
echo “1+2+…+100=$sum”
第二种条件循环:直到型循环
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= i−gt100]dosum=(( s u m + sum+ sum+i))
i= ( ( (( ((i+1))
done
(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