################函数#############
(1).语法
函数名() {
函数体
return n
}
或
function 函数名(){
函数体
return n
}
(2).调用函数
#!bin/bash
function fun1() {
echo "westos"
}
fun1
(3).引用函数
每次引用函数时,bash回重新回到函数的定义 ,用一个脚本来理解
打出5个echo输出结束循环并且结束后打出一次输出
可见每次输出后都重新读取函数的定义i am a boy
在这里插入代码片
#!bin/bash
function fun1() {
echo "i am boy"
}
count=1
while [ $count -le 5 ]
do
fun1
count=$[ $count + 1 ]
done
echo "end of loop"
fun1
echo "end of script"
sh -x (脚本)可以看脚本如何运行来调式脚本
(4)使用函数要先定义
下面这个脚本在使用fun2之后才定义,会报错
#!bin/bash
count=1
echo "before function definition"
function fun1() {
echo "fun1"
}
while [ $count -le 5 ]
do
fun1
count=$[ $count + 1 ]
done
echo "end of loop"
fun2
function fun2() {
echo "fun2"
}
(5).定义同样的函数时会覆盖掉同名函数
#!/bin/bash
function fun1() {
echo "first fun1"
}
fun1
function fun1() {
echo "second fun1"
}
fun1
function fun1() {
echo "third fun1"
}
fun1
echo "End"
可见每一次定义fun1都会覆盖上一个定义
(6).返回值
#!/bin/bash
function fun1() {
echo "trying to display a non-existent file"
ls -l westosfile &> /dev/null
}
echo "test the function:"
fun1
echo "The exit status is : $?"
函数退出时返回值非0时执行有错误
当我们设置return 0时输出的返回值为0即使执行的结果报错
注意return 0必须写在定义函数内容里
同理能修改为任意数字
#!/bin/bash
function fun1() {
echo "trying to display a non-existent file"
ls -l westosfile &> /dev/null
return 0
}
echo "test the function:"
fun1
echo "The exit status is : $?"
return可以在后面接一个函数改变返回值为运算结果
#!/bin/bash
function db1() {
read -p "Enter a value:" value
return $[ $value * 2 ]
}
db1
echo "The new value is $?"
可见$?变为了输入值乘2
(7).使用函数输出
这样能把函数输出保存在shell变量中
可以获得任何类型的函数输出保存到变量里
#!/bin/bash
function db1() {
read -p "enter a value:" value
echo $[ $value * 2 ]
}
result=`db1`
echo "the new value is $result"
(8).函数中使用变量
可以向函数中传递参数
函数名会在$0变量中定义
函数命令行上的任何参数都会通过$1,$2定义
$#来判断传给函数的参数数目
写脚本运算两数字相乘,输入数字多于或少于两个数字报错
#!/bin/bash
function fun1() {
echo $[ $1 * $2 ]
}
if [ $# -eq 2 ];then
value=`fun1 $1 $2`
echo "The result is $value"
else
echo "Usage:fun1 a b"
fi
(9).设置当函数没有获得$1值时,和获得值的不同情况执行不同函数
写脚本输入空格输出-1,输入两个数输出相加结果,输入一个数等于自身相加
#!/bin/bash
a=$1
b=$2
function kong() {
echo "-1"
}
function dan() {
echo " $a + $a = $[a+a] "
}
function shuang() {
echo " $a + $b = $[a+b] "
}
if [ $# == 0 ];then
kong
elif [ $# == 1 ];then
dan
elif [ $# == 2 ];then
shuang
else
echo " command error "
fi
#############变量的作用域#####################
1.全局变量在函数内和外都能用
这里函数内代表的是定义函数的大括号内
#!/bin/bash
function db1() {
value=$[ $value * 2 ]
}
read -p "enter a value: " value
db1
echo " the new value is:" $value
2.局部变量
定义用local $value
此时在定义函数的大括号外输入$value时显示的值与定义函数的大括号内的修改无关
用脚本证明
#!/bin/bash
function fun1() {
local temp=$[ $value + 5 ]
result=$[ $temp * 2 ]
}
temp=4
value=6
fun1
echo "The result is $result"
if [ $temp -gt $value ];then
echo "temp is larger"
else
echo "temp is smaller"
fi
################函数第归##############
1.第归计算阶乘
#!/bin/bash
read -p "Num:" num
result=1
for i in `seq $num`
do
result=$[ $result * $i ]
done
echo "the result is $result"
用函数第归运算
for语句调用function
#/bin/bash
read -p "Num: " num
d=1
function fun1(){
d=$[ $d * $i]
}
for i in `seq $num`
do
fun1
done
echo $d