日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell 函数的高级用法

發布時間:2023/12/31 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell 函数的高级用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數介紹

linux shell中的函數和大多數編程語言中的函數一樣 將相似的任務或者代碼封裝到函數中,供其他地方調用

語法格式

?

如何調用函數

?

shell終端中定義函數

[root@master day3]# test() > { > echo "test function"; > }

  

?

?

練習;時刻監聽 nginx的進程,失敗重啟

nginx_daemon.sh

#!/bin/bash # # 獲取腳本子進程的pid,如果腳本名稱中帶nginx,也會當成nginx進程 this_pid=$$while true do ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/nullif [ $? -eq 0 ];thenecho "Nginx is running well"sleep 5 elsesystemctl start nginxecho "Nginx is down,Start it..." fi done

?

啟動腳本

sh nginx_daemon.sh

?

?

?

?一系統守護進程運行

nohup sh nginx_daemon.sh &

 

查看日志 

tail -f nohup.out

?

?向函數傳遞參數

?一些高級語言傳遞參數

?

?高級語言函數調用

?

?

?

?shell 中函數傳參

shell 中函數調用

?

簡單小示例

[root@master day3]# function greeeting > { > echo "hello $1" > }

向函數傳遞參數: 函數傳參和給腳本傳參類似,都是使用$1 $2 $3 $4 $5 $6 $7這種方式

例子1:

需求描述:寫一個腳本,該腳本可以實現計算器的功能,可以進行+-*/四種運算。

calucate.sh

#!/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

  

?

函數的返回值

返回值的方式

?

使用 return 返回值

?

使用 echo 返回值  

 

案例1??判斷nginx進程是否存在

函數使用return返回值,通常只是用來供其他地方調用獲取狀態,因此通常僅返回0或1;0表示成功,1表示失敗

nginx.sh

#!/bin/bash #this_pid=$$function is_nginx_running {ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/nullif [ $? -eq 0 ];thenreturn 0elsereturn 1fi }is_nginx_running && echo "nginx is running" || echo "nginx is stopped"

  

執行腳本  

sh nginx.sh

  

?

?查看腳本進程的執行過程

sh -x nginx.sh

  

?

?

?案例2??獲取系統中的用戶

使用echo返回值 使用echo可以返回任何字符串結果 通常用于返回數據,比如一個字符串值或者列表值

get_sys_user.sh

#!/bin/bash ## 獲取系統所有的用戶名 function get_users {users=`cat /etc/passwd | cut -d: -f1`echo $users }# 定義一個變量將獲取用戶列表賦值給這個變量 user_list=`get_users`index=1 for u in $user_list doecho "the $index user is : $u"index=$(($index+1)) done

  

?執行腳本

sh get_sys_user.sh

?

shell函數中的局部變量和全局變量

?

全局變量

?

局部變量

var.sh

#!/bin/bash #var1="Hello world"function test {var2=87 }echo $var1 echo $var2

  

?

調用test函數后,$var2就變成了全局變量

#!/bin/bash #var1="Hello world"function test {var2=87 }echo $var1 echo $var2test # 調用test函數后,$var2就變成了全局變量echo $var1 echo $var2

?

在函數中也可以調用全局變量

#!/bin/bash #var1="Hello world"function test {var2=87 }echo $var1 echo $var2testecho $var1 echo $var2function test1 {echo $var2 }test1

  

?

如果函數中聲明了局部變量,當函數執行完成后局部變量就會被銷毀

#!/bin/bash #var1="Hello world"function test {local var2=87 # 局部變量,只在函數內部生效,生命周期只在函數內部 }testecho $var1 echo $var2

?

函數庫

為什么要定義函數庫

函數庫示例:

定義一個函數庫,該函數庫實現以下幾個函數:

  • 1.加法函數add add 12 89
  • 2.減法函數reduce reduce 90 30
  • 3.乘法函數multiple multiple 12 10
  • 4.除法函數divide divide 9 3
  • 5.打印系統運行情況的函數sys_load,該函數可以顯示內存運行情況,磁盤使用情況

cat /lib/base_function

function add {echo "`expr $1 + $2`" }function reduce {echo "`expr $1 - $2`" }function multiple {echo "`expr $1 \* $2`" }function divide {echo "`expr $1 / $2`" }function sys_load {echo "Memory info"echofree -mechoecho "Disk Usage"echodf -hecho }

 

測試庫函數

. /lib/base_function sys_load

  

?

?calculate.sh

#!/bin/bash ## 引入庫函數,寫絕對路徑避免出錯 . /lib/base_functionadd 12 23reduce 90 30multiple 12 12divide 12 2

?

?

庫函數經驗之談:

  • 庫文件名的后綴是任意的,但一般使用.lib
  • 庫文件通常沒有可執行權限
  • 庫文件無需和腳本放在同級目錄,只需要在腳本中引用時指定
  • 第一行一般使用#!/bin/echo,輸出警告信息,避免用戶執行

  

?

轉載于:https://www.cnblogs.com/crazymagic/p/11071874.html

總結

以上是生活随笔為你收集整理的shell 函数的高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。