shell腳本之函數


函數:
1、函數介紹:
為了避免函數代碼重復使用,我們一般通過函數編寫代碼塊,而這一個代碼塊用來實現某種功能
並且,這個功能在后面的代碼中,會重復調用。
2、函數的格式:
function fun_name{
函數體
}
check_CPU 【不調用函數,則函數體中的命令不會執行;在哪里調用,函數體中的命令就在那里執行】
fun_name(){
函數體
$1$2$3$4$5
}
fun_name 1 2 33
3、函數的調用
函數的返回值
1、當函數中指定了判斷語句的時候,我們默認要返回一個錯誤的結果,但是最近一條命令確實正確的,這時候,我們需要通過return返回一個我們需要的狀態碼
2、函數結束的時候,我們需要指定一個return的1正確返回碼
如果使用在循環語句中,return會跳出循環;
4、函數接受參數
函數 變量
和普通命令一樣
只需要注意,函數接受參數的時候,不會使用外部的參數,而是以腳本內部的參數為准。
5、函數中的變量
本地變量
local變量名=XXX
本地變量只在本地函數內部生效
局部變量
腳本內部的變量
環境變量
在整個Linux系統的bash中生效

i=1

TEST(){
local i=9
let i++
echo i
exit 0
}

拓展:關於腳本執行的問題
bash的方式來執行----#!/bin/bash
全路徑或者相對路徑的方式來執行;----必須有授權執行權限;
source 腳本文件 或者 .腳本文件
source 這種方式來執行腳本的時候,內部變量所定義的值是在當前shell中的;/


6、函數遞歸
你 站在鏡子前,后面又有一面鏡子

兔子數列,斐波那契數列

1 #!/bin/bash
2 # Author: wangshilin
3 # Blog: https://home.cnblogs.com/wangshilin/
4 # Time: 2019-08-19 23:44:43
5
6 f[0]=1
7 f[1]=1
8 for((i=2;i<10;i=i+1))
9 do
10 f[i]=$((f[i-1]+f[i-2]))
11 done
12
13 for((j=0;j<10;j=j+1))
14 do
15 echo -e ${f[j]}" \c"
16 if test $(((j+1)%2)) = 0
17 then
18 echo -e ""
19 fi
20 done

練習
1、腳本可以接受參數:start stop restart status
case 參數 in
start)
stop)
restart)
status)
*)
【case PAT支持的格式:* 任意內容 start|stop) a*) (case語句中的PAT是支持文件通配的) 】
2、如果參數非此四者之一,提示使用個時候報錯退出;
*)
echo "Usage:please input {start|stop|restart|status}"
3、如果是start:則創建 /var/lock/subsys/SCRIPT_NAME,並顯示“啟動成功”【考慮:如果事先已經啟動過一次,該如何處理?】
start)
if [ -e /var/lock/subsys/testd_name ];then
echo "服務已啟動"
else
touch /var/lock/subsys/testd_name
echo "服務啟動成功"
fi
4、如果是stop:則刪除/var/lock/subsys/SCRIPT_NAME,並顯示“停止完成”;【考慮:如果事先已經停止過了,該如何處理?】
stop)
if [ -e /var/lock/subsys/testd_name ];then
rm -f /var/lock/subsys/testd_name
echo "服務關閉成功"
else
echo "服務已經關閉"
fi
5、如果restart,則先stop,再start;【考慮:如果本來沒有start,如何出列?】
restart)
【將前面的代碼寫成函數】
start
stop
6、如果是status,則
如果/var/lock/subsys/SCRIPT_NAME文件存在,則顯示“SCRIPT_NAME is running…”
如果/var/lock/subsys/SCRIPT_NAME文件不存在,則顯示“SCRIPT_NAME is stopped …”

1 #!/bin/bash
2 # Author: wangshilin
3 # Blog: https://home.cnblogs.com/wangshilin/
4 # Time: 2019-08-19 18:51:07
5 i=file.txt
6 Start(){
7 if [ -e /root/$i ]; then
8 echo" running"
9 else
10 touch /root/$i
11 echo "Running"
12 fi
13 }
14 Stop (){
15 if [ -e /root/$i ]; then
16 rm -f /root/$i
17 echo "stop"
18 fi
19 }
20 Status(){
21 if [ -e /root/$i ]; then
22 echo "running"
23 else
24 echo "stop"
25 fi
26 }
27 Ugage(){
28 echo "Ugage /root/li2.sh {start|stop|restart|status}"
29
30 }
31 case $1 in
32 start)
33 Start
34 ;;
35 stop)
36 Stop
37 ;;
38 restart)
39 Stop
40 Start
41 ;;
42 status)
43 Status
44 ;;
45 *)
46 Ugage
47 ;;
48 esac


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM