1. 程式人生 > >Linux學習筆記十六:shell函數練習

Linux學習筆記十六:shell函數練習

ini ip add sed -n 無需 狀態 rest 十六 inux emctl

可以組織一些常用的方法,寫到函數裏面,作為公共的方法方便shell腳本調用,這樣可以簡化步驟,提高可讀性,不用重復造輪子了。
# 調用系統公共函數方法
. /etc/init.d/functions

階乘

fact(){
                if [ $1 -eq 1 ];then
                                echo 1
                else
                                echo $[$1*$(fact $[$1-1])]
                fi
}

漢諾塔

#local i=1
hanio(){
                                if [ $1 -eq 1 ];then
                                                echo "第$i步:$2-->$4"
                                else

                                                hanio $[$1-1] $2 $4 $3
                                                let i+=1
                                                echo "第$i步:$2-->$4"
                                                let i+=1
                                                hanio $[$1-1] $3 $2 $4

                                fi
}

判斷系統版本

sys_ver(){
                VER=`cat /etc/redhat-release |sed -nr ‘s/.* ([0-9]+)\..*/\1/p‘`
                return $VER

}

獲取任意一塊網卡的ip地址

get_ip(){
                for nic in $*;do
                                #echo ${nic}的IP地址是:`ip addr show $nic 2> /dev/null |sed -nr ‘s/.* ([0-9.]+).* [0-9.]+ .*$/\1/p‘`
                                RES=`ip addr show $nic 2> /dev/null|sed -nr ‘s/.* ([0-9.]+).* [0-9.]+ .*$/\1/p‘`
                                #echo $RES
                                if [ -z "$RES" ];then
                                                echo ${nic}不存在
                                else
                                                echo ${nic}的IP地址是:`ip addr show $nic |sed -nr ‘s/.* ([0-9.]+).* [0-9.]+ .*$/\1/p‘`
                                fi
                done

}

打印綠色OK和紅色FAILED

service_status(){

                if [ $# -eq 0 ];then
                                echo "Usage: $0 service_name ..."
                else
                                for service in $*;do
                                                RES=`ls /usr/lib/systemd/system |grep $service.service`
                                                if [ -z "$RES" ];then
                                                                action "$service服務沒有安裝" false
                                                else
                                                                action $service的狀態:`systemctl status $service |sed -nr ‘/active/s/[[:space:]]+Active: (\b\w+\b) .*/\1/p‘` true
                                                                #STATUS=`systemctl status $service |sed -nr ‘/active/s/[[:space:]]+Active: (\b\w+\b) .*/\1/p‘`
                                                                #echo $STATUS
                                                fi
                                done
                fi
                #return $STATUS
}

start, stop, restart, status --模擬service

start(){
                if [ ! -e /var/lock/subsys/$0 ];then
                                touch /var/lock/subsys/$0
                                action "啟動成功" true
                else
                                action "已經處於啟動狀態,無需處理" true
                fi
}
stop(){
                if [ ! -e /var/lock/subsys/$0 ];then
                                action "已經處於停止狀態,無需處理" false
                else
                                rm -rf /var/lock/subsys/$0
                                action "服務停止成功!" true
                fi
}
restart(){
                if [ ! -e /var/lock/subsys/$0 ];then
                                touch /var/lock/subsys/$0;action "啟動成功" true
                else
                                rm -rf /var/lock/subsys/$0;touch /var/lock/subsys/$0;action "重啟成功" true
                fi
}
status(){
                if [ ! -e /var/lock/subsys/$0 ];then
                                action "服務停止狀態" false
                else
                                action "服務啟動狀態" true
                fi
}

#未完待續...

Linux學習筆記十六:shell函數練習