Shell-06 函数
Shell-06 函數
#編寫腳本,使用chkconfig命令,循環執行,關閉所有5級別服務
#!/bin/bash name=`chkconfig --list | cut -d' ' -f1`for i in [name];dochkconfig --level 5 $i offdonename=`chkconfig --list | awk '{print $1}'`for i in $name;doif chkconfig --list $i | grep "5:off" &> /dev/null;thenecho "這個$i服務已經關閉"elsechkconfig --level 5 $i offecho "這個$i服務已經關閉"fidone1.函數介紹
為了避免代碼的重復使用,我們一般通過函數編寫代碼塊,而這個代碼塊用來實現某種功能。且這個功能在后面得代碼中,會重復調用;
Def
2.函數的格式
function
格式1:
????????????? Function fun_name{
???????????????????? 函數體
}
?????? Fun_name()
【不調用函數,則函數體中的命令是不會被執行的;在哪里調用,函數體中的命令就在那里執行】
格式2:
?????? Fun_name(){
????????????? 函數體
$1 $2…$10
}
Fun_name 1 2 3
:wq
Fun_name 4 5 6 7 8 9 10 11 12 13 14
?
1.Case PATTERN支持的格式:* 任意內容start|stop) a*)
?????? Case語句中的pattern支持文件通配符的
2.*)
?????? Echo “Usage:please input{start|stop|restart|status}”????
if [ -e /var/lock/subsys/testd_name ] ;then
??????? echo “腳服務已啟動”
else
??????? touch /var/lock/subsys/testd_name
??????? echo “服務啟動成功”
fi
if [ -e /var/lock/subsys/testd_name ] ;then
??????? rm -f? /var/lock/subsys/testd_name
??????? echo “服務掛關閉成功”
else
??????? echo “服務已關閉”
fi
【將前面的代碼寫成函數】
??? Start
Stop
?
fun_start(){
??????? if [ -e /var/lock/subsys/testd_name ];then
??????????????? echo "服務已啟動"
??????? else
??????????????? touch /var/lock/subsys/testd_name
??????????????? echo "服務啟動成功"
??????? fi
}
fun_stop(){
??????? if [ -e /var/lock/subsys/testd_name ];then
??????????????? rm -f /var/lock/subsys/testd_name
??????????????? echo "服務關閉成功"
??????? else
??????????????? echo "服務已關閉"
??????? fi
}
fun_restart(){
??????? fun_stop
??????? fun_start
}
fun_status(){
??? ????if [ -e /var/lock/subsys/testd_name ];then
??????????????? echo "testd_name is running"
??????? else
??????????????? echo "testd_name is stopped"
??????? fi
}
fun_usage(){
???????? echo "Usage: please input{start|stop|restart|status}"
}
if [ $# -lt 1 ];then
??????? Usage
??????? exit 1
fi
case $1 in
??????? start)
??????????????? fun_start
??????????????? ;;
??????? stop)
??????????????? fun_stop
??????????????? ;;
??????? reatart)
??????????????? fun_restart
??????????????? ;;
??????? status)
??????????????? fun_status
??????????????? ;;
??????? *)
??????????????? fun_usage
??????????????? ;;
esac
?
?
a)?????? 當函數中指定了判斷語句時,默認要返回一個錯誤結果,但是最近一條命令確實正確的,需要通過return來返回我們需要的正確的狀態碼。
b)????? 函數結束的時候,我們需要指定一個return的正確返回碼;
如果使用循環語句時,return會跳出循環
Userdel -r 刪除用戶以及用戶家目錄
函數 變量
和普通命令一樣
只需要注意,在接收參數的時候,不會使用外部的傳參,而是以腳本內部的參數為準
本地變量
????????????????????? Local 變量名=xxx
????????????????????? 本地變量只在本函數的內部生效
局部變量
????????????????????? 腳本內部的變量
環境變量
????????????????????? 在整個Linux系統的bash中生效
i=1
TEST(){
??????? Local i=9
??????? Let i++
??????? Echo i
??????? Exit 0
}
TEST
Echo i
擴展:關于腳本執行的問題
a)?????? bash的方式來執行
bash所執行的腳本中定義的變量,在當前shell的子shell中
b)????? 通過全路徑或者相對路徑的方式來執行-------#!/bin/bash 需要授權執行權限;
c)?????? Source腳本文件或者.腳本文件
Source這種方式來執行腳本的時候,內部變量所定義的值是在當前的shell中的
你 站在鏡子的前面,后面又有一面鏡子
n的階乘n!=n*(n-1)!(n-1)!=(n-1)*(n-2)!fun(){if [ $1 -le 1 ];thenecho 1elseq=$[$1*$(fun$[$1-1])]echo $qfi}fun 5?
?
?
兔子數列,斐波那契數列
1+1=2? 1+2=3 2+3=5 3+5=8
1 1 2 3 5 8 13 21 34….
Fn = F(n-1)+F(n-2)
?
轉載于:https://www.cnblogs.com/KAJIA1/p/11392371.html
總結
以上是生活随笔為你收集整理的Shell-06 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell-05 sed
- 下一篇: testNG的DataProvider返