shell脚本之函数初识

位置参数:$1,$2

返回值:  $?

  说明:函数的返回值,是函数最后一条命令执行的状态码

return:自定义状态码

局部变量:local ,只在函数内部有效,强烈建议使用说明:在shell主体和函数中,创建的变量,默认为全局变量,会互相引用和影响

注意::

1、完成特定功能的代码块(片段)

2、在shell中定义函数可以使代码模块化,便于复用代码

3、函数必须先定义,在调用

 

(一)shell函数语法

1、函数的表示方式

第一种语法第二种语法第三种语法
function 函数名(){ } function 函数名 {} 函数名() { }

2、实例:函数的写法

[root@centos6-kvm3 scripts]# cat 08-01.sh
#!/bin/bash
function oldboy(){
echo "me is $1 teacher"

}
function oldgirl {
echo "i is $1 teacher"
}

test() {
echo "dis is $1"
}

oldboy $1
oldgirl $2
test $3
[root@centos6-kvm3 scripts]# bash 08-01.sh oldboy oldgirl test
me is oldboy teacher
me is oldgirl teacher
dis is test

3、实例:检测web网站是否正常

wget 命令:

--spider 模拟爬虫(不下载)

-q 安静访问

-o /dev/null 不输出

-T --timeout 超时时间

-t --tries 重试次数

 wget --spider -T 5 -q -o /dev/null -t 2 www.baidu.com
 echo $?

curl命令:

-me 查看响应头

-s 安静的

-o /dev/null 不输出

-w%{http_code} 返回状态码

[root@centos6-kvm3 scripts]# curl -me -s -o /dev/null -w "%{http_code}\n" www.baidu.com
200

检测网站案例展示:

[root@centos6-kvm3 scripts]# cat 08-02.sh
#!/bin/bash
function usage(){
echo "usage:$0 url"
exit 1
}
function url_check {
wget -q -o /dev/null -T 5 -t 3 $1
if [ $? -eq 0 ]
tan
   echo "$1 is ok!"
else
   echo "$1 is fail!"
fi
}
main(){
if [ $# -ne 1 ]
then
   usage
else
   url_check $1
fi
}


练习:

1 #!/bin/bash
2
3 if [ $# -ne 3 ];then
4    echo " usage `basename $0` par1 par2 par3"
5   exit
6 fi
7 num1=$1  #num1、num2、num3属于自定义变量可以放在函数前,也可以放在函数后
8 num2=$2
9 num3=$3
10 function3() {
11    echo " $(($num1 * $num2 * $num3)) " #等同于$[ $num1 * $num2 * $num3 ]
12 }
13 result=`function3 $num1 $num2 $num3` #用自定义变量“result”来接送function3的函数输出,$num1 $num2 $num3 是送给函数的参数
14 echo " result is: $result "

等同于

1 #!/bin/bash
2
3 if [ $# -ne 3 ];then
4    echo " usage `basename $0` par1 par2 par3"
5    exit
6 fi
7
8 function3() {
9    echo " $(( $1 * $2 * $3 )) "
10 }
11 result=`function3 $1 $2 $3`
12 echo " result is: $result "

 

函数调用数组-阶乘

1 #!/bin/env bash
2 sum=(1 2 3)
3
4 fun (){
5   local array=1
6   for i in $@;do
7    let array*=$i #等价于 let array=$[ array * i ]
8 done
9 echo "$array"
10 }
11 fun ${sum[@]} 

给函数传递数组及返回数组

1 #!/bin/env bash
2 num=(1 2 3)
3 num2=(2 2 3)
4 array(){
5   local newarray=($@) #等同于 local newarray=(`echo $@`)
6   local outarray=() #变量outarray值为空,()表示空
7   local i
8 for ((i=0;i<$#;i++));do
9 outarray[$i]=$[ ${newarray[$i]} * 5 ]
10 done
11 echo "${outarray[@]}"
12
13 }
14 result=`array ${num[@]}`
15 echo "${result[@]}"
16
17
18 result=`array ${num2[@]}`
19 echo "${result[@]}"

 

posted on 2020-04-29 13:48  步留痕  阅读(216)  评论(0)    收藏  举报

导航