最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)時不需要從硬盤讀取,因此運行的速度比較快。

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

將一些相對獨立的代碼變成函數(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ù),然后做加法運算,最后通過調(diào)用函數(shù)的方式來輸出兩個數(shù)的和。

[root@localhost ~]# vim sum. sh
#!/bin/bash
sum() {
echo"請輸入第一個數(shù):"
read num1
if![[[$num1 =~ ^[0-9]+$ ]];
then
echo"輸入的第一個數(shù)不是有效的整數(shù),請重新運行腳本并輸入正確的數(shù)字。"
return 1
fi
echo"請輸入第二個數(shù):"
read num2echo"輸入的第一個數(shù)不是有效的整數(shù),請重新運行腳本并輸入正確的數(shù)字。"
return 1
fi
echo"請輸入第二個數(shù):"
read num2
if![[[ $num2 =~ ^[0-9]+$ ]]; 
then
echo"輸入的第二個數(shù)不是有效的整數(shù),請重新運行腳本并輸入正確的數(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)用中可擴展為發(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命令進行浮點數(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....的方式表達。

[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)系進行展示。

[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"請輸入您的分數(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)文章

  • xmapp環(huán)境搭建注意事項說明

    xmapp環(huán)境搭建注意事項說明

    如果要用其他IP訪問,需要到apache/conf/ext/httpd-xmapp.cf配置文檔下修改最后的一段信息,注釋掉一行拒絕IP的。還有修改一個允許訪問IP的為(*)
    2013-11-11
  • Apache ShardingSphere簡介及使用詳解

    Apache ShardingSphere簡介及使用詳解

    Apache ShardingSphere 是一款開源的分布式數(shù)據(jù)庫生態(tài)系統(tǒng),主要用于實現(xiàn)數(shù)據(jù)庫的分片、讀寫分離和全鏈路壓測等功能,下面給大家介紹Apache ShardingSphere 初識使用,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Linux低電量自動關(guān)機的實現(xiàn)方法

    Linux低電量自動關(guān)機的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Linux低電量自動關(guān)機的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用linux具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • ubuntu生成Git的ssh-key方式

    ubuntu生成Git的ssh-key方式

    本文介紹了在Ubuntu上生成Git的ssh-key的過程,包括設(shè)置git的user.name和user.email,通過命令生成ssh-key,以及查看生成的ssh-key
    2026-03-03
  • Linux防火墻設(shè)置允許特定IP訪問指定端口

    Linux防火墻設(shè)置允許特定IP訪問指定端口

    文章介紹了服務(wù)器安全設(shè)置,包括啟用防火墻、檢查端口、關(guān)閉端口訪問、添加特定IP訪問特定端口的方法步驟,以及注意事項
    2025-04-04
  • 基于CentOS的Hadoop分布式環(huán)境的搭建開發(fā)

    基于CentOS的Hadoop分布式環(huán)境的搭建開發(fā)

    本篇文章介紹了基于CentOS的Hadoop分布式環(huán)境的搭建開發(fā),有興趣的可以了解一下。
    2016-11-11
  • Linux、CentOS下安裝zip與unzip指令功能(服務(wù)器)

    Linux、CentOS下安裝zip與unzip指令功能(服務(wù)器)

    這篇文章主要介紹了Linux、CentOS下安裝zip與unzip指令的操作方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-11-11
  • Linux多線程編程(一)

    Linux多線程編程(一)

    linux多線程設(shè)計是指基于Linux操作系統(tǒng)下的多線程設(shè)計,包括多任務(wù)程序的設(shè)計,并發(fā)程序設(shè)計,網(wǎng)絡(luò)程序設(shè)計,數(shù)據(jù)共享等。Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。
    2014-08-08
  • 詳解虛擬機中CentOS 7 網(wǎng)絡(luò)和ssh的配置

    詳解虛擬機中CentOS 7 網(wǎng)絡(luò)和ssh的配置

    這篇文章主要介紹了詳解虛擬機中CentOS 7 網(wǎng)絡(luò)和ssh的配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Linux zabbix agent部署及配置方法詳解

    Linux zabbix agent部署及配置方法詳解

    這篇文章主要介紹了Linux zabbix agent部署及配置方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論

伽师县| 巴塘县| 科技| 黑河市| 龙里县| 景洪市| 加查县| 怀宁县| 方山县| 梧州市| 黔江区| 英山县| 启东市| 玛曲县| 龙山县| 阿鲁科尔沁旗| 敖汉旗| 秭归县| 乐都县| 保山市| 上蔡县| 蛟河市| 始兴县| 酒泉市| 南乐县| 澄城县| 广平县| 襄垣县| 清水县| 全椒县| 金湖县| 米脂县| 察雅县| 革吉县| 兴山县| 庆安县| 页游| 扬州市| 保亭| 西乌珠穆沁旗| 车险|