shell指令碼專家指南筆記#2.使用函式庫
阿新 • • 發佈:2018-12-18
##
# 本文為《shell指令碼專家指南》學習筆記。
##
2.1. 使用庫
可以將常用函式,封裝如庫檔案中,在需要用對應函式時,只要匯入對應庫檔案即可。
示例:通過匯入庫檔案,就可以引用已寫好的函式。
比如,匯入OSTYPE環境變數。
#!/bin/echo WARN: this library should be sourced! # ostype(): import OSTYPE variable. ostype() { osname=`uname -s` OSTYPE="UNKNOWN" case $osname in "FreeBSD") OSTYPE="FREEBSD" ;; "SunOS") OSTYPE="SOLARIS" ;; "Linux") OSTYPE="LINUX" ;; esac return 0 }
centos6.5版本,自帶OSTYPE變數,為linux-gnu。
匯入庫後,呼叫ostype函式,OSTYPE變數變為 LINUX,表示庫匯入成功。
#!/bin/bash
. ./libmy.sh
ostype
echo $OSTYPE
2.2. 常用庫
shell指令碼專家指南一書中,推薦了三個作者常用庫。
示例:
#!/bin/echo WARN: this library should be sourced! # if the number is even, return 1. evenodd() { LAST_DIGIT=`echo $1 | sed 's/\(.*\)\(.\)$/\2/'` case $LAST_DIGIT in 2|4|6|8|0) return 1 ;; *) return 0 ;; esac } # if the node is online, return 1. isalive() { NODE=$1 $PING -c 3 $NODE > /dev/null 2>&1 if [ $? -eq 0 ] then return 1 else return 0 fi } # setup variables, NAME PING ... setupenv() { ostype NAME=`uname -n` case $OSTYPE in "LINUX") PING=/bin/ping ;; "FREEBSD") PING=/sbin/ping ;; "SOLARIS") PING=/usr/sbin/ping ;; esac }
三個函式分別是:
獲得輸入字串,最後一個字元是否為偶數。
判斷一個節點是否線上。
初始化NAME PING 變數,這個原文中,在呼叫ostype前做了判斷。
如果OSTYPE變數為空,才呼叫ostype函式。因為centos預設有一個
OSTYPE變數,值為Linux-gnu,故此處直接呼叫了ostype函式。
原文的PING在LINUX系統下,路徑為/usr/sbin/ping,而centos中
為/bin/ping,此處也做了修改。
另外,作者推薦了一個linux自帶的函式示例庫,為/etc/init.d/functions.sh,
在centos6.5中,為/etc/init.d/functions,現在我能力不夠,等以後再做研究。
2.3. 呼叫庫
source lib.sh
或者
. lib.sh
示例:
#!/bin/bash
# export functions.
. ./libmy.sh
setupenv
evenodd 123456
echo $?
isalive host1
echo $?