欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell編程之函數(shù)與數(shù)組的使用詳解

 更新時間:2025年04月15日 15:12:04   作者:2401_84100398  
這篇文章主要介紹了shell編程之函數(shù)與數(shù)組的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

shell函數(shù)

函數(shù)的用法

Shell函數(shù)可用于存放一系列的指令。

在Shell腳本執(zhí)行的過過程中,函數(shù)被置于內(nèi)存中,每次調(diào)用函數(shù)時不需要從硬盤讀取,因此運(yùn)行的速度比較快。

在Shell編程中函數(shù)并非是必須的元素,但使用函數(shù)可以對程序進(jìn)行更好的組織。

將一些相對獨(dú)立的代碼變成函數(shù)女,可以提高程序可讀性與重用性,避免編寫大量重復(fù)代碼。

Shell函數(shù)定義的方法如下所示:

[function]函數(shù)名() {
命令序列
[return x]
}
  • "function"關(guān)鍵字表示定義一個函數(shù),可以省略;
  • "{"符號表示函數(shù)執(zhí)行命令的入口,該符號可以與函數(shù)名同行t也可以在函數(shù)名下一行的句首;
  • "}"符號表示函數(shù)體結(jié)束,兩個大括號之間{}是函數(shù)體;
  • "命令序列"部分可以是任意的Shell命令,也可以調(diào)用其他函數(shù)
  • "return"表示退出函數(shù)返回一個退出值,通過返回值判斷執(zhí)行是否成功,也可以使用exit終止整個Shell腳本。

倆個數(shù)求和

使用Shell腳本實現(xiàn)兩個數(shù)相加求和,通過定義函數(shù)的方式來完成。

sum函數(shù)內(nèi)部通過read命接收用戶分別輸入的兩個數(shù),然后做加法運(yùn)算,最后通過調(diào)用函數(shù)的方式來輸出兩個數(shù)的和。

[root@localhost ~]# vim sum. sh
#!/bin/bash
sum() {
echo"請輸入第一個數(shù):"
read num1
if![[[$num1 =~ ^[0-9]+$ ]];
then
echo"輸入的第一個數(shù)不是有效的整數(shù),請重新運(yùn)行腳本并輸入正確的數(shù)字。"
return 1
fi
echo"請輸入第二個數(shù):"
read num2echo"輸入的第一個數(shù)不是有效的整數(shù),請重新運(yùn)行腳本并輸入正確的數(shù)字。"
return 1
fi
echo"請輸入第二個數(shù):"
read num2
if![[[ $num2 =~ ^[0-9]+$ ]]; 
then
echo"輸入的第二個數(shù)不是有效的整數(shù),請重新運(yùn)行腳本并輸入正確的數(shù)字。"
return 1
fi
result=$((num1 + num2))
echo"兩數(shù)之和為:$result"
sum
[root@localhost ~]# chmod +x sum.sh
[root@localhost ~]# ./sum.sh
請輸入第一個數(shù):2
請輸入第二個數(shù):3
"你輸入的兩個數(shù)為:2和3."
"兩個數(shù)的和為:5"

系統(tǒng)資源監(jiān)控并報警函數(shù)

該函數(shù)會定期監(jiān)控系統(tǒng)的CPU和內(nèi)存使用率,當(dāng)使用率超過設(shè)定的閾直時,會發(fā)送報警信息,這里簡單模擬為輸出到控制臺,實際應(yīng)用中可擴(kuò)展為發(fā)送郵件、短信等。

[root@localhost ~]# vim jiankong.sh
#!/bin/bash
#發(fā)送報警信息的函數(shù)
send alert() {
local message=$1
echo "ALERT: $message"
}

monitor_system_resources() {
local cpu_threshold=$1
local mem_threshold=$2
local interval=$3

while true;
do
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print$2+$4}')
mem_usage=$(free | awk '/Mem/ {printf("%.2f",$3/$2 * 1((00)}.
if(( $(echo "$cpu_usage > $cpu_threshold" | bc -1) ));
then
   send_alert "CPU usage ($cpu_usage%)."
fi
if(( $(echo "$mem_usage > $mem_threshold" | bc-1) )); then
send_alert "Memory usage ($mem_usage%)."
fi
sleep "$interval"
done
}
monitor_system_resources 5 1 5
  • 參數(shù)說明:函數(shù)接收三個參數(shù),分別是CPU使用率閾值、內(nèi)存使用率閾值以及監(jiān)控間隔時間(秒)。
  • 循環(huán)監(jiān)控:使用whiletrue循環(huán)不斷監(jiān)控系統(tǒng)資源。通過 top和free命令獲取CPU和內(nèi)存使用率,使用bc命令進(jìn)行浮點(diǎn)數(shù)比較。
  • 報警處理:當(dāng)使用率超過閾值時,調(diào)用send_alert函數(shù)發(fā)送報警信息。

函數(shù)變量的作用范圍

在編寫腳本時,有時需要將變量的值限定在函數(shù)內(nèi)部,可以通過內(nèi)置命令local來實現(xiàn)。函數(shù)內(nèi)部變量的使用,可以避免函數(shù)內(nèi)外同時出現(xiàn)同名變量對腳本結(jié)果的影響。

[root@localhost ~]# vim fun_scope.sh
myfun ()
{
local i
i=8
echo $i
}
i=9
myfun
echo $i
[root@localhost ~]# chmod +x fun_scope.sh
[root@localhost ~]# ./fun_scope.sh
8
9

函數(shù)的參數(shù)

函數(shù)的參數(shù)的用法如下。

函數(shù)名稱 參數(shù)1 參數(shù)2 參數(shù)3.

在使用函數(shù)參數(shù)時,函數(shù)名稱在前參數(shù)在后,函數(shù)名和參數(shù)之間用空格分隔,可以有多個參數(shù),參數(shù)使用$1,$2,$3....的方式表達(dá)。

[root@localhost ~]# vim write_log.sh
#!/bin/bash
mydir="/data" outfile="${mydir}/my.log"
[ -e "${mydir}" ] | mkdir -p ${mydir}
appendfile()
{
echo "$2" >> "$1"
}
appendfile ${outfile} "first line content."
appendfile ${outfile} "second line content."
[root@localhost ~]# chmod +x write_log.sh
[root@localhost ~]# ./write_log.sh
[root@localhost ~]# cat /data/my.log
firstline content. second line content.

遞歸函數(shù)

Shell也可以實現(xiàn)遞歸函數(shù),就是可以調(diào)用自己本身的函數(shù)。

在Linux系統(tǒng)上編寫Shell腳本的時候,經(jīng)常需要遞歸遍歷系統(tǒng)的目錄,列出目錄下的文件和和目錄,逐層遞歸列出,并對這些層級關(guān)系進(jìn)行展示。

[root@localhost ~]# vim fun_recursion.sh
#!/bin/bash
traverse_directory() {
local dir=$1
for item in "$dir"/*; 
do
if [ -d "$item" ]; 
then
echo "Directory: $item"
traverse_directory "$item"
elif [ -f "$item" ];
 then
echo "File: $item"
fi
done
}

traverse_directory "."
[root@localhost ~]# chmod +x fun_recursion.sh
[root@localhost ~]# ./fun_recursion.sh

shell數(shù)組

在Shell腳本中,數(shù)組是一種常見的數(shù)據(jù)結(jié)構(gòu),Shell中的數(shù)組與Java、C、Python不同,只有維數(shù)組,沒有二維數(shù)組。

數(shù)組元素的大小與限制,也不需要事先定義。

Shell數(shù)組用括號()來表示,元素用空格分隔,元素的下標(biāo)與大部分編程語言類似從0開始.

  • 方法一:

數(shù)組名=(value0value1value2...

  • 方法二:

數(shù)組名=([0]=value [1]=value [2]=value...)

  • 方法三:

列表名="valueevalue1value2."數(shù)組名=($列表名)

  • 方法四:

數(shù)組名[0]="value"數(shù)組名[1]="value"數(shù)組名[2]="value

獲取數(shù)組的長度

獲取普通數(shù)組長度可以使用${#數(shù)組名[@]}或${#數(shù)組名[*]}這兩種語法效果一樣。

[root@localhost ~]# arr_number=(1 2 3 4 5)
[root@localhost ~]# arr_length=${#arr_number[*]}
[root@localhost ~]# echo $arr_length
5
[root@localhost ~]# arr_length_1=${#arr_number[@] 
[root@localhost ~]# echo $arr_length_1
5

讀取某下的標(biāo)賦值

在Shell編程里,你可以讀取數(shù)組中指定下標(biāo)的元素,也可以給指定下標(biāo)的數(shù)組元素賦值。

[root@localhost ~]# arr_index2=${arr_number[2]}
[root@localhost ~]# echo $arr_index2
з

數(shù)組遍歷

在Shell編程里,數(shù)組遍歷指的是按順序訪問數(shù)組中的每一個元素,并對這些元素執(zhí)行特定操作的過程。

[root@localhost ~]# vim array_traverse.sh
#!/bin/bash
arr_number=(1 2 3 4 5)
for i in ${arr_number[@]}
do
echo $i
done
[root@localhost ~]# chmod +x array_traverse.sh
[root@localhost ~]# ./array_traverse.sh
1
2
3
4
5

數(shù)組切片

數(shù)組切片是一種操作,用于從數(shù)組中提取出一部分連續(xù)的元素,形成一個新的數(shù)組,此存操作在不同的版本種存在差異。

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# echo ${arr[@]}
12345
[root@localhost ~]# echo ${arr[@]:0:2}
1 2
[root@localhost ~]# echo ${arr[@]:2:3}
3 4 5

數(shù)組替換

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# echo ${arr[@]/4/66}
1 2 3 66 5
[root@localhost ~]# echo ${arr[@]}
1 2 3 4 5
[root@localhost ~]# arr=(${arr[@]/4/66})
[root@localhost ~]# echo ${arr[@]}
1 2 3 66 5

數(shù)組刪除

  • 刪除數(shù)組
[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr
  • 刪除單個元素
[root@localhost ~]# echo ${arr[*]}
[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr[2]
[root@localhost ~]# echo ${arr[*]}
1 2 4 5

shell腳步調(diào)試

在shell腳本開發(fā)中,要注意把復(fù)雜的腳本簡單化,思路要清晰,分段。

除echo外,bash shell亦有相應(yīng)的參數(shù)可以調(diào)試腳本。

使用bash參數(shù)調(diào)試,語法為:

sh [-nvx] 腳本名

  • -n:不會執(zhí)行該腳本,僅查詢腳本語法是否有問題,如果沒有語法問題就不顯示任何內(nèi)容,如果有問題會提示報錯。
  • -V:在執(zhí)行腳本時,先將腳本的內(nèi)容輸出到屏幕上然后執(zhí)行腳本,如果有錯誤,也會給出錯誤提
  • -x:將執(zhí)行的腳本內(nèi)容輸出到屏幕上,這個是對調(diào)試很有用的參數(shù)。
[root@localhost ~
vim test.sh
#!/bin/bash
set-x/
read-p"請輸入您的分?jǐn)?shù)(0-100):"GRADE
if[$GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo"$GRADE分!優(yōu)秀"
elif [ $GRADE -ge 70 ] & [ $GRADE -1e 84 ]
then
echo"$GRADE分,合格"else
echo"$GRADE分?不合格"
fi
set +x

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux系統(tǒng)中配置靜態(tài)IP地址的詳細(xì)步驟

    Linux系統(tǒng)中配置靜態(tài)IP地址的詳細(xì)步驟

    本文詳細(xì)介紹了在Linux系統(tǒng)中配置靜態(tài)IP地址的五個步驟,包括打開終端、編輯網(wǎng)絡(luò)配置文件、配置IP地址、保存并重啟網(wǎng)絡(luò)服務(wù),這對于系統(tǒng)管理員和新手都極具參考價值,需要的朋友可以參考下
    2025-03-03
  • Linux中別名與二進(jìn)制的使用教程

    Linux中別名與二進(jìn)制的使用教程

    這篇文章主要給大家介紹了關(guān)于Linux中別名與二進(jìn)制的使用方法,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • CentOS6.3添加nginx系統(tǒng)服務(wù)的實例詳解

    CentOS6.3添加nginx系統(tǒng)服務(wù)的實例詳解

    這篇文章主要介紹了CentOS6.3添加nginx系統(tǒng)服務(wù)的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 如何利用sed命令高效刪除文件的特定行

    如何利用sed命令高效刪除文件的特定行

    這篇文章主要給大家介紹了關(guān)于如何利用sed命令高效刪除文件的特定行的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 使用命令行檢測Ubuntu版本方法

    使用命令行檢測Ubuntu版本方法

    在本篇文章中小編給大家整理了關(guān)于使用命令行檢測Ubuntu版本方法和相關(guān)代碼,有興趣的朋友們學(xué)習(xí)下。
    2019-03-03
  • linux開機(jī)啟動nodemanager步驟

    linux開機(jī)啟動nodemanager步驟

    這篇文章主要介紹了linux開機(jī)啟動nodemanager的步驟,大家參考使用吧
    2014-01-01
  • Linux 命令行通配符及轉(zhuǎn)義符的實現(xiàn)

    Linux 命令行通配符及轉(zhuǎn)義符的實現(xiàn)

    這篇文章主要介紹了Linux 命令行通配符及轉(zhuǎn)義符的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 解決linux下大量TIME WAIT的方法詳解

    解決linux下大量TIME WAIT的方法詳解

    本篇文章是對linux下大量TIME WAIT的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Linux下Apache安裝/增加mod_rewrite模塊的方法

    Linux下Apache安裝/增加mod_rewrite模塊的方法

    如果你的apache已經(jīng)安裝好了,現(xiàn)在只想編譯出mod_rewrite.so模塊,在apache中進(jìn)行加載,下面我們就介紹這個方法。
    2011-04-04
  • Centos7 安裝達(dá)夢數(shù)據(jù)庫的教程

    Centos7 安裝達(dá)夢數(shù)據(jù)庫的教程

    這篇文章主要介紹了Centos7 安裝達(dá)夢數(shù)據(jù)庫的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論