1.shell脚本传参https://blog.csdn.net/sinat_36521655/article/details/792961812.shell脚本获得其他命令的执行结果http://book.51cto.com/art/201411/457601.htm3.shell脚本读取输入https://blog.csdn.net/wdz306ling/article/details/795579314.shell怎么修改环境变量
java通用启动脚本
#!/bin/bash#程序住目录APP_HOME=/usr/local/ods/app/dispatchif [ ! -d "$APP_HOME/log4j" ]; then mkdir $APP_HOME/log4jfi#需要启动的Java主程序(main方法类)APP_MAINCLASS=com.pa.agentbank.drs.job.Start#java虚拟机启动参数JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn256m -Dsys_config_path=/usr/local/ods/app/dispatch/"#拼凑完整的classpath参数,包括指定lib目录下所有的jarfor i in "$APP_HOME"/lib/*.jar; do CLASSPATH="$CLASSPATH":"$i"donefor i in "$APP_HOME"/*.jar; do CLASSPATH="$CLASSPATH":"$i"done####################################(函数)判断程序是否已启动##说明:#使用JDK自带的JPS命令及grep命令组合,准确查找pid#jps 加 l 参数,表示显示java的完整包路径#使用awk,分割出pid ($1部分),及Java程序名称($2部分)####################################初始化psid变量(全局)psid=0 checkpid() { javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS` if [ -n "$javaps" ]; then psid=`echo $javaps | awk '{print $1}'` else psid=0 fi}####################################(函数)启动程序##说明:#1. 首先调用checkpid函数,刷新$psid全局变量#2. 如果程序已经启动($psid不等于0),则提示程序已启动#3. 如果程序没有被启动,则执行启动命令行#4. 启动命令执行后,再次调用checkpid函数#5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]#注意:echo -n 表示打印字符后,不换行#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法###################################start() { checkpid if [ $psid -ne 0 ]; then echo "================================" echo "warn: $APP_MAINCLASS already started! (pid=$psid)" echo "================================" else echo -n "Starting $APP_MAINCLASS ..." #JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &" #su - $RUNNING_USER -c "$JAVA_CMD" #nohup java -cp $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 & #nohup java $JAVA_OPTS -cp ./app_conf:$CLASSPATH $APP_MAINCLASS >/usr/local/ods/app/process/log4j/shellStart.log & nohup java -cp ./app_conf:$CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 & sleep 3 checkpid if [ $psid -ne 0 ]; then echo "(pid=$psid) [OK]" else echo "[Failed]" fi fi}####################################(函数)停止程序##说明:#1. 首先调用checkpid函数,刷新$psid全局变量#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行#3. 使用kill -9 pid命令进行强制杀死进程#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。#注意:echo -n 表示打印字符后,不换行#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值###################################stop() { checkpid if [ $psid -ne 0 ]; then echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) " #su - $RUNNING_USER -c "kill -9 $psid" kill -9 $psid if [ $? -eq 0 ]; then echo "[OK]" else echo "[Failed]" fi sleep 3 checkpid if [ $psid -ne 0 ]; then stop fi else echo "================================" echo "warn: $APP_MAINCLASS is not running" echo "================================" fi}####################################(函数)检查程序运行状态##说明:#1. 首先调用checkpid函数,刷新$psid全局变量#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid#3. 否则,提示程序未运行###################################status() { checkpid if [ $psid -ne 0 ]; then echo "$APP_MAINCLASS is running! (pid=$psid)" else echo "$APP_MAINCLASS is not running" fi} case "$1" in 'start') start ;; 'stop') stop ;; 'status') status ;; *) echo "Usage: $0 {start|stop|status}" ;; esac
jenkins脚本
#!/bin/sh. /etc/profile#输入参数1 项目名称,也是tar包的名称app_name=$1if [ 0 == ${app_name:-0} ]then echo "please input the app name" exit 1fitomcat_home=/usr/local/tomcattomcat_webapp=$tomcat_home/webapps/$app_nameSHUTDOWN=$tomcat_home/bin/shutdown.shSTARTUP=$tomcat_home/bin/startup.shapp_home=$tomcat_home/$app_nameapp_tar=${app_name}.tar.gzapp_bak=$app_home/bakinstall_dir=/home/tomcattime_stamp=`date +%Y%m%d-%H%M%S`#回滚方法function rollback(){ echo ">>> Install rollback." bak_file=`ls ${app_bak} -t | head -1 |grep -v 'total'` bak_path=$app_bak/$bak_file echo ">>> Rollback file : $bak_path." for file in $app_home/* do if [ "$file" != "$app_bak" -a "$file" != "$app_home" ] then rm -rf $file fi done mv $bak_path/* $app_home echo ">>> Remove rollback directory." rm -rf $bak_path echo "<<< Rollback complete."}#创建app_home目录function app_homedir(){ if [ ! -e $app_home ] then echo ">>> Make directory $app_home" mkdir $app_home if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi fi}#备份app路径下除bak外的所有文件function bak_app(){ echo ">>> Backup app" if [ ! -e $app_bak ] then echo ">>> Make directory $app_bak" mkdir $app_bak if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi fi bak_name=`find $app_home -maxdepth 1 -name "ver.*" -printf "%f\n"` if [ 0 == ${bak_name:-0} ] then path_bak=$app_bak/first_bak else array=( `echo $bak_name | tr '.' ' '` ) path_bak=$app_bak/${array[1]} fi if [ ! -e $path_bak ] then echo ">>> Make directory $path_bak" mkdir $path_bak if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi fi for file in $app_home/* do if [ "$file" != "$app_bak" -a "$file" != "$app_home" ] then mv $file $path_bak fi done echo "<<< Backup app complete"}#解压到app路劲下function install_app(){ echo ">>> Install $app_name start" #部署日期标识 touch $app_home/ver.${time_stamp} if [ $? != 0 ] then echo ">>> install fail,install will rollback" return 1 fi if [ ! -e $install_dir/$app_tar ] then rollback echo "<<< App install file is not exist,please check the app install file" exit 1 fi tar -zxf $install_dir/$app_tar -C $app_home if [ $? != 0 ] then echo ">>> install fail,install will rollback" return 1 fi rm -f $install_dir/$app_tar if [ $? != 0 ] then echo ">>> install fail,install will rollback" return 1 fi echo "<<< Install $app_name complete"}#安装tomcat文件function install_webapps(){ echo ">>> install webapps start" if [ ! -e $tomcat_webapp ] then echo ">>> Make directory $tomcat_webapp" mkdir $tomcat_webapp if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi else echo ">>> Remove $tomcat_webapp" rm -rf $tomcat_webapp/* if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi fi if [ ! -e $install_dir/tomcat-app.tar.gz ] then echo "<<< App install file is not exist,please check the webapps install file" if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi fi tar -zxf $install_dir/tomcat-app.tar.gz -C $tomcat_webapp rm -f $install_dir/tomcat-app.tar.gz echo "<<< install webapps complete"}#修改tomcat中web.xml配置文件,指定目录为app_home目录function update_config(){ echo ">>> Update $tomcat_webapp/WEB-INF/web.xml" sed -i "s!\${sysprop_home}!${app_home}\/config\/system.properties!g" $tomcat_webapp/WEB-INF/web.xml echo "<<< Update the vframe-home to $app_home/config/system.properties"}#删除多余备份,只保留3个文件function bak_remove(){ if [ -e $app_bak ] then bak_num=`ls ${app_bak} -l | awk '/^d/' | wc -l` if [ $bak_num -gt 3 ] then del_num=`expr ${bak_num} - 3` for bak_file in `ls ${app_bak} -tr | head -${del_num} |grep -v 'total'` do echo ">>> Delete bak $app_bak/$bak_file" rm -rf $app_bak/$bak_file done fi fi}#关闭tomcatfunction kill_tomcat(){ echo ">>> Tomcat shutdown." sh $SHUTDOWN sleep 2 pidList=$(ps aux | grep $tomcat_home | grep -v grep | awk '{print $2}') for pid in $pidList do kill -9 $pid if [ $? != 0 ] then echo ">>> Install fail,please check the log" exit 1 fi echo ">>> Kill the process [$pid] successfully." done echo "<<< Tomcat shutdown complete"}#启动tomcatfunction start_tomcat(){ echo ">>> Tomcat startup" sh $STARTUP if [ $? != 0 ] then echo "<<< Fail : Tomcat restart failure." exit 1 fi echo "<<< Tomcat startup complete."}echo "=================$app_name install start================="echo ">>> Timestamp:$time_stamp"kill_tomcatapp_homedirbak_appinstall_appif [ $? != 0 ]then rollback echo "Install fail,please check the log" exit 1fiinstall_webappsupdate_configbak_removestart_tomcatecho "=================$app_name install done================="