第一個shell腳本編寫shell
#!/bin/bashapache
# 上面中的 #! 是一種約定標記, 它能夠告訴系統這個腳本須要什麼樣的解釋器來執行;bootstrap
#定義變量:tomcat
APP_BASE_PATH="/opt/app"bash
#特殊變量:app
$1 傳遞給腳本或者函數的第1個參數 $2 依次類推函數
NODE_NAME="$1"spa
OP="$2"ci
WARNAME="$3"get
WARFILE="$4"
#使用變量
只須要在一個定義過的變量前面加上美圓符號 $ 就能夠了, 另外,對於變量的{} 是能夠選擇的, 它的目的爲幫助解釋器識別變量的邊界.
SERVER_NAME="apache-tomcat-$NODE_NAME"
SERVER_DIR="$APP_BASE_PATH/$SERVER_NAME"
#將命令輸出的值賦值給一個變量
directory=`pwd` #用反引號將命令引發來 echo $directory
tId=`ps -ef|grep "${SERVER_DIR}/bin/bootstrap.jar"|grep -v "grep"|awk '{print $2}'`
if語句
if[表達式] then 語句 fi
if[表達式] then 語句 else 語句 fi
條件判斷
if [ -z STRING ] 「STRING」 的長度爲零則爲真。
if [ -z ${WARNAME} ]; then
echo "please specify war name!"
echo "Usage: ./tom.sh NODE_NAME -w WARNAME /path/to/file.war"
exit 0
fi
if [ ! -s ${WARFILE} ] 若是文件存在且大小不爲0
then
echo "file not exist: [${WARFILE}]"
exit 0
fi
shell函數
shell函數必須先定義再使用
start() {
echo -n $"Starting $SERVER_NAME: "
tId=`ps -ef|grep "${SERVER_DIR}/bin/bootstrap.jar"|grep -v "grep"|awk '{print $2}'`
if [ ${tId:=0} -ne 0 ]
then
echo "failure: it's already startup,please stop first.[Failed]"
else
${SERVER_DIR}/bin/startup.sh
sleep 2
tId=`ps -ef|grep "${SERVER_DIR}/bin/bootstrap.jar"|grep -v "grep"|awk '{print $2}'`
if [ ${tId:=0 } -eq 0 ]
then
echo "failure: See details on ${SERVER_DIR}/logs/catalina.out. [Failed]"
else
echo "success [OK]"
fi
fi
}
注意:1. 調用函數只須要給出函數名,不須要加括號。
basename 命令用於建立基本文件名稱
targetWar=`basename ${WARFILE}`
if [ "${targetWar%%.war*}" != "${WARNAME}" ]; then
echo "ERROR: Target file name must equles '${WARNAME}.war.*'"
echo " Please change file name and retry."
exit 0
else
echo "war file path: ${WARFILE}"
fi
${targetWar%%.war*} 把targetWar變量的值刪掉匹配.war*的後綴的值