第一個shell腳本編寫
#!/bin/bash
# 上面中的 #! 是一種約定標記, 它可以告訴系統這個腳本需要什么樣的解釋器來執行;
#定義變量:
APP_BASE_PATH="/opt/app"
#特殊變量:
$1 傳遞給腳本或者函數的第1個參數 $2 依次類推
NODE_NAME="$1"
OP="$2"
WARNAME="$3"
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*的后綴的值