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