1. 程式人生 > >shell指令碼專家指南筆記#2.使用函式庫

shell指令碼專家指南筆記#2.使用函式庫

##
# 本文為《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 $?