自学shell编程——第4讲(自定义函数)
1. 定义函数框架。函数名()-{-函数体-}。以下几点注意:
- shell函数不需要形参。在函数内部,使用$# 和 $* 分别表示函数内部的参数个数和参数内容。函数体内的参数命令与调用函数的名字不一定一致,或者你可以不使用变量传参,直接内容。(这里写个代码,方便大家理解)
#!/bin/bash
add()
{
echo "$num1 + $sum2 = `expr $num1 + $sum2 `"
}
$number1=3;$number2=4
$num1=3;$sum2=4
add $number1 $number2 #变量名不一致。输出3 + 4 = 7
add 3 4 #直接内容。输出3 + 4 = 7
add $num1 $sum2 #变量名一致。输出3 + 4 = 7
add 3 4 5 #多了一个输入,但是函数只使用前两个。输出3 + 4 = 7
- shell函数输出返回值使用return。默认return 0。且return只能返回int类型(0,1,2,…)。不能返回字符串。
- 调用函数的时候,要传递参数,不使用括号。fun str1 str2;//正确。fun(str1,str2);//错误
2. 简单函数举例
#!/bin/bash
#认识函数中参数和返回值
fun()
{
echo $* #输出参数内容
echo $# #输出参数个数
#对所有参数进行遍历
for argu in $*
do
echo $argu
done
return 2 #这里只能是Int类型,否则报错
}
str="good morning everyong"
fun good morning everyong #或者fun $str
echo $? #输出上一条shell语句的返回值,即函数fun的返回值2
test -e file.txt #判断file.txt文件是否存在
echo $? #输出上一条test语句的返回值。若file.txt存在,则返回0
3. 数字炸弹游戏(随机设置一个100以内的炸弹数字),然后游戏者输入一个0~100的数字,进行判断,输出小于或大于该数,最后输出“Good.Game over. The boom number is $boom”。
#!/bin/bash
boom=$[RANDOM%100+1] #随机生成一个100以内的炸弹数字
read -p "Game start!!! Please input a munber(0~100):" num
boom()
{
if [ $num -eq $boom ]
then
echo "Good. Game over. The boom number is $num."
else
if [ $num -lt $boom ]
then
read -p "Error. please input a number(>$num) is:" num
boom $num $boom
else
read -p "Error. please input a number(<$num) is:" num
boom $num $boom
fi
fi
}
boom $num $boom
#执行:./game.sh
运行结果如下:
当然这个脚本可以用while循环完成,你可以自己写一下。(也可以查看我的另一篇文章自学shell编程——练习题)