Shell-06 函数
Shell-06 函數(shù)
#編寫(xiě)腳本,使用chkconfig命令,循環(huán)執(zhí)行,關(guān)閉所有5級(jí)別服務(wù)
#!/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 "這個(gè)$i服務(wù)已經(jīng)關(guān)閉"elsechkconfig --level 5 $i offecho "這個(gè)$i服務(wù)已經(jīng)關(guān)閉"fidone1.函數(shù)介紹
為了避免代碼的重復(fù)使用,我們一般通過(guò)函數(shù)編寫(xiě)代碼塊,而這個(gè)代碼塊用來(lái)實(shí)現(xiàn)某種功能。且這個(gè)功能在后面得代碼中,會(huì)重復(fù)調(diào)用;
Def
2.函數(shù)的格式
function
格式1:
????????????? Function fun_name{
???????????????????? 函數(shù)體
}
?????? Fun_name()
【不調(diào)用函數(shù),則函數(shù)體中的命令是不會(huì)被執(zhí)行的;在哪里調(diào)用,函數(shù)體中的命令就在那里執(zhí)行】
格式2:
?????? Fun_name(){
????????????? 函數(shù)體
$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支持的格式:* 任意內(nèi)容start|stop) a*)
?????? Case語(yǔ)句中的pattern支持文件通配符的
2.*)
?????? Echo “Usage:please input{start|stop|restart|status}”????
if [ -e /var/lock/subsys/testd_name ] ;then
??????? echo “腳服務(wù)已啟動(dòng)”
else
??????? touch /var/lock/subsys/testd_name
??????? echo “服務(wù)啟動(dòng)成功”
fi
if [ -e /var/lock/subsys/testd_name ] ;then
??????? rm -f? /var/lock/subsys/testd_name
??????? echo “服務(wù)掛關(guān)閉成功”
else
??????? echo “服務(wù)已關(guān)閉”
fi
【將前面的代碼寫(xiě)成函數(shù)】
??? Start
Stop
?
fun_start(){
??????? if [ -e /var/lock/subsys/testd_name ];then
??????????????? echo "服務(wù)已啟動(dòng)"
??????? else
??????????????? touch /var/lock/subsys/testd_name
??????????????? echo "服務(wù)啟動(dòng)成功"
??????? fi
}
fun_stop(){
??????? if [ -e /var/lock/subsys/testd_name ];then
??????????????? rm -f /var/lock/subsys/testd_name
??????????????? echo "服務(wù)關(guān)閉成功"
??????? else
??????????????? echo "服務(wù)已關(guān)閉"
??????? 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)?????? 當(dāng)函數(shù)中指定了判斷語(yǔ)句時(shí),默認(rèn)要返回一個(gè)錯(cuò)誤結(jié)果,但是最近一條命令確實(shí)正確的,需要通過(guò)return來(lái)返回我們需要的正確的狀態(tài)碼。
b)????? 函數(shù)結(jié)束的時(shí)候,我們需要指定一個(gè)return的正確返回碼;
如果使用循環(huán)語(yǔ)句時(shí),return會(huì)跳出循環(huán)
Userdel -r 刪除用戶(hù)以及用戶(hù)家目錄
函數(shù) 變量
和普通命令一樣
只需要注意,在接收參數(shù)的時(shí)候,不會(huì)使用外部的傳參,而是以腳本內(nèi)部的參數(shù)為準(zhǔn)
本地變量
????????????????????? Local 變量名=xxx
????????????????????? 本地變量只在本函數(shù)的內(nèi)部生效
局部變量
????????????????????? 腳本內(nèi)部的變量
環(huán)境變量
????????????????????? 在整個(gè)Linux系統(tǒng)的bash中生效
i=1
TEST(){
??????? Local i=9
??????? Let i++
??????? Echo i
??????? Exit 0
}
TEST
Echo i
擴(kuò)展:關(guān)于腳本執(zhí)行的問(wèn)題
a)?????? bash的方式來(lái)執(zhí)行
bash所執(zhí)行的腳本中定義的變量,在當(dāng)前shell的子shell中
b)????? 通過(guò)全路徑或者相對(duì)路徑的方式來(lái)執(zhí)行-------#!/bin/bash 需要授權(quán)執(zhí)行權(quán)限;
c)?????? Source腳本文件或者.腳本文件
Source這種方式來(lái)執(zhí)行腳本的時(shí)候,內(nèi)部變量所定義的值是在當(dāng)前的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?
?
?
兔子數(shù)列,斐波那契數(shù)列
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)
?
轉(zhuǎn)載于:https://www.cnblogs.com/KAJIA1/p/11392371.html
總結(jié)
以上是生活随笔為你收集整理的Shell-06 函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Shell-05 sed
- 下一篇: 系统基础