Shell函数
- 函数的作用
- 命令合集,完成特定功能的代码块
- 函数必须先定义才可以使用,如果定义不调用则不被执行
- 使代码模块化,避免重复代码,加强可读性,便于复用
函数基本用法
定义函数三种写法
## 方法一
函数名() {
函数要实现的功能代码
}
## 方法二
function 函数名 {
函数要实现的功能代码
## 方法三
function 函数名() {
函数要实现的功能代码
}
基本语法
[root@Shell ~]# vim test.sh
#!/bin/bash
## 定义函数
function mantou () {
echo "吃馒头!"
}
function miantiao () {
echo "吃面条!"
}
## 调用函数(不调用不会执行)
mantou
[root@Shell ~]# source test.sh
吃馒头
定义错误数值
[root@Shell ~]# vim return.sh
#!/bin/bash
funreturn() {
read -p "enter num: " num
return $[2*$num]
}
funreturn
[root@Shell ~]# source return.sh 2 ; echo $?
4
函数传参
位置传参
#!/bin/bash
## 位置变量不是3个就退出
if [ $# -ne 3 ];then
echo "usage: `basename $0` par1 par2 par3"
exit
fi
## 函数里面三个位置变量相乘
fun() {
echo "$(($1 * $2 * $3))"
}
## 函数有参数时候,必须在函数后面加上参数,下面两种都可以
fun $*
fun $1 $2 $ $3
数组传参
#!/bin/bash
## 定义数组
num=(1 2 3)
num2=(2 3 4)
## 传递所有数值相乘并显示最后结果
array() {
number=1
for i in $*
do
number=$[number * $i]
done
echo "$number"
}
## 把数组里元数值传递函数相乘
array ${num[*]}
array ${num2[*]}
编写
Nginx
启动脚本,使用系统内置函数达到返回结果
#!/bin/bash
## 调用系统内置函数
source /etc/init.d/functions
## 执行
ret(){
if [ $? -eq 0 ];then
action "Nginx Is $1" /bin/true
else
action "Nginx Is $1" /bin/false
fi
}
status(){
Ngx_status=$(ps aux|grep "[n]ginx"|egrep -v "vi|sh"|grep master|awk '{print
$2}')
Nginx_Status_Port=$(netstat -lntp|grep nginx|awk '{print $4}')
echo "Nginx_status_Pid: $Ngx_status"
echo "Nginx_status_Port: $Nginx_Status_Port"
}
case $1 in
start)
/usr/sbin/nginx &>/dev/null
ret $1
;;
stop)
/usr/sbin/nginx -s stop &>/dev/null
ret $1
;;
restart)
/usr/sbin/nginx -s stop &>/dev/null
ret $1
sleep 1
/usr/sbin/nginx &>/dev/null
ret $1
;;
reload)
/usr/sbin/nginx -s reload
ret $1
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload|}"
esac