三、函數(shù)定義和使用

函數(shù)的定義和使用

函數(shù)1

函數(shù)的定義1

函數(shù)的定義2

函數(shù)的調(diào)用
# 命令行下定義行數(shù)
[root@izuf6j02r724hog9g0lyndz shell_practice]# test()
> {
> echo "hello world"
> }
[root@izuf6j02r724hog9g0lyndz shell_practice]# test
hello world
[root@izuf6j02r724hog9g0lyndz shell_practice]# 

案例1:定義腳本,當(dāng)nginx進(jìn)程掛掉之后會(huì)自動(dòng)把進(jìn)程拉起

如果通過ps -ef 抓取到進(jìn)程后,通過echo ? =0,可以判斷該進(jìn)程是存在的,否則該進(jìn)程就不存在,?=1進(jìn)程已經(jīng)死亡。假如我們?cè)诿_本的時(shí)候名字中包含nginx,此時(shí)我們執(zhí)行腳本的時(shí)候腳本依舊作為一個(gè)進(jìn)程,此時(shí)即使我們?cè)谀_本中過濾了grep 的進(jìn)程,依舊會(huì)輸出1,因此命名的時(shí)候不能講腳本的名字中包含nginx。 會(huì)輸出腳本執(zhí)行的子進(jìn)程的pid輸出出來,因此可以先通過this_pid =,grep -v $this_pid自然會(huì)過濾該腳本的進(jìn)程

#!/bin/bash
#

this_pid=$$

while true
do
ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null

if [ $? -eq 0 ];then
    echo "Nginx is running well"
    sleep 3
else
    systemctl start nginx
    echo "Nginx is down,Start it...."
fi
done

向函數(shù)傳遞參數(shù)

shell中傳參

調(diào)用有參數(shù)的函數(shù)

使用$1,$2等參數(shù)

寫一個(gè)腳本,可以實(shí)現(xiàn)"+-*/"

#!/bin/bash
#

function calcu
{
    case $2 in
        +)
            echo "`expr $1 + $3`"
            ;;
        -)
            echo "`expr $1 - $3`"
            ;;
        \*)
            echo "`expr $1 \* $3`"
            ;;
        /)
            echo "`expr $1 / $3`"
            ;;
    esac
}


calcu $1 $2 $3
#命令行調(diào)用
sh calcu.sh 20 + 30

函數(shù)返回值

返回值的方式

返回1-255區(qū)間的值

使用echo返回

實(shí)例:返回值判斷nginx進(jìn)程是否存在,使用this_pid=$$的時(shí)候不能用空格

三元運(yùn)算符
#! /bin/bash
#

this_pid=$$

function n
{
        ps -ef | grep nginx |grep -v grep | grep -v  $this_pid &> /dev/null
        if [ $? -eq 0 ];then
                return
        else
                return 1
        fi


}

n && echo "runnint" || echo "stoped"

輸出所有用戶,用echo做返回值

#! /bin/bash
#
function users
{
        users=`cat /etc/passwd |cut -d: -f1`
        echo $users
}
user_list=`users`
for i in $user_list
do
        echo $i
done

局部變量與全局變量

全局變量

局部變量

如上,雖然對(duì)var2變量進(jìn)行了賦值,但是因?yàn)樽兞抠x值的函數(shù)并沒有被調(diào)用,因此var2輸出還是null

這個(gè)var2賦值的函數(shù)test一旦被調(diào)用,var2就變成一個(gè)全局變量,此時(shí)可以輸出var2的值,87

使用loal關(guān)鍵字,var2變成局部變量

函數(shù)庫

為什么要用函數(shù)庫

函數(shù)庫實(shí)例

函數(shù)庫實(shí)例
  1. 定義庫函數(shù):vi bash_function。注意這里的命令替換,假如用expr 做數(shù)學(xué)運(yùn)算,要轉(zhuǎn)義,同時(shí)要用命令替換,假如用$(())來做數(shù)學(xué)運(yùn)算,不用轉(zhuǎn)義,同時(shí)不用加``符號(hào)。
function add
{
        echo "`expr $1 + $2`"
}

function reduce
{
        echo "`expr $1 - $2`"
}

function mul
{
        echo "$(($1 * $2))"
}

function mult
{
        echo "`expr $1 \* $2`"
}
~  
  1. 使用.來做命令替換
#! /bin/bash
#
. /root/shell_practice/bash_function

add 1 2
mult 3 4

mul 3 5

庫函數(shù)的使用經(jīng)驗(yàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容