一.shell系统变量(主要是用于对参数判断和命令返回值判断时使用)
$0 #当前脚本的名称;
$n #当前脚本的第n个参数,n=1,2,…9;
$* #当前脚本的所有参数(不包括程序本身);
$# #当前脚本的参数个数(不包括程序本身);
$? #令或程序执行完后的状态,返回0表示执行成功;
$$ #程序本身的PID号。
二.常见逻辑判断运算符
-f #判断文件是否存在 eg: if [ -f filename ];
-d #判断目录是否存在 eg: if [ -d dir ];
-eq #等于,应用于整型比较 equal;
-ne #不等于,应用于整型比较 not equal;
-lt #小于,应用于整型比较 letter;
-gt #大于,应用于整型比较 greater;
-le #小于或等于,应用于整型比较;
-ge #大于或等于,应用于整型比较;
-a #双方都成立(and) 逻辑表达式 –a 逻辑表达式;
-o #单方成立(or) 逻辑表达式 –o 逻辑表达式;
-z #空字符串;
-x #是否具有可执行权限
|| #单方成立;
&& #双方都成立表达式。
三.shell脚本启动集群服务
例:现有3台服务器,通过脚本在以下3台服务器上启动/停止/重新启动cend-main-0.0.1-SNAPSHOT.jar服务。
服务器1:103.162.37.166
服务器2:103.162.37.167
服务器3:103.162.37.168
#!/bin/bash
SERVICE_DIR=/home/application
SERVICE_NAME=cend-main-0.0.1-SNAPSHOT.jar
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit
fi
case $1 in
"start"){
for i in 103.162.37.166,103.162.37.167,103.162.37.168
do
ssh $i
echo --------$i is starting...---------
cd ${SERVICE_DIR}
nohup java -jar ${SERVICE_NAME} &
echo -------服务$i is started successfully.--------
done
};;
"stop"){
for i in 103.162.37.166,103.162.37.167,103.162.37.168
do
ssh $i
echo -------$i is stopping...--------
pid=`ps -ef|grep ${SERVICE_NAME}|grep java|grep -v grep|awk '{print $2}'`
kill -9 $pid
echo -------$i is stopped successfully.--------
done
};;
"restart"){
for i in 103.162.37.166,103.162.37.167,103.162.37.168
do
ssh $i
echo -------$i is stopping...--------
pid=`ps -ef|grep ${SERVICE_NAME}|grep java|grep -v grep|awk '{print $2}'`
kill -9 $pid
echo -------$i is stopped successfully.--------
echo --------$i is starting...---------
cd ${SERVICE_DIR}
nohup java -jar ${SERVICE_NAME} &
echo -------服务$i is started successfully.--------
done
};;
esac