Shell函数

  • 函数的作用
    • 命令合集,完成特定功能的代码块
    • 函数必须先定义才可以使用,如果定义不调用则不被执行
    • 使代码模块化,避免重复代码,加强可读性,便于复用

toc

函数基本用法

定义函数三种写法

## 方法一
函数名() {
    函数要实现的功能代码
}
## 方法二
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

posted on 2019-11-18 18:51  云襄  阅读(128)  评论(0编辑  收藏  举报

导航