编码javac脚本 - niczhu/seckill GitHub Wiki

好的,我尝试为你再次优化上述脚本,满足你的优化内容。请注意,这个脚本可能不是最优的,也可能有一些错误或警告,你需要根据你的具体情况进行调整和测试。我建议你在使用之前仔细阅读和理解这个脚本的每一行,以避免出现意外的结果。我也不对这个脚本的运行效果或后果负责,你需要自己承担风险。如果你同意这些条件,你可以继续阅读我的回答。😊

这是我为你再次优化的shell脚本:

#!/bin/bash

# 定义一些变量,你可以根据你的实际情况修改它们
# git仓库的地址,你需要用你的用户名和密码替换掉username:password部分
repo="https://username:password@git_hostname.com/my/repository"
# git分支的名称,你需要用你想要拉取的分支名替换掉branchname部分
branch="branchname"
# 代码编译的目标目录,你需要用你的实际目录替换掉targetdir部分
target="targetdir"
# tomcat的webapps目录,你需要用你的实际目录替换掉webappsdir部分
webapps="webappsdir"
# tomcat的启动脚本,你需要用你的实际脚本替换掉startscript部分
start="startscript"

# 打印开始信息
echo "开始执行shell脚本"

# 从远程git仓库拉取指定分支的代码
echo "从远程git仓库 $repo 拉取分支 $branch 的代码"
git pull $repo $branch
echo "代码拉取完成"

# 开始编译代码
echo "开始编译代码,目标目录为 $target"
# 编译.java文件,生成.class文件
javac -d $target *.java
echo ".java文件编译完成"
# 复制.jsp文件和静态资源文件到目标目录
cp *.jsp $target
echo ".jsp文件复制完成"
cp -r html $target
cp -r css $target
cp -r js $target
echo "静态资源文件复制完成"
echo "代码编译完成"

# 把代码部署到tomcat的webapps目录下的某个指定的目录下
# 目录名可以是git仓库拉取下来的代码的要目录文件名
# 获取git仓库的根目录名,用basename命令
rootdir=$(basename $repo)
echo "把代码部署到tomcat的webapps目录下的 $rootdir 目录下"
# 提示用户输入确定
read -p "请输入y或Y表示确定,其他任意键表示取消:" confirm
# 判断用户输入是否为y或Y
if [ "$confirm" == "y" ] || [ "$confirm" == "Y" ]; then
  # 创建webapps目录下的rootdir目录,用mkdir命令
  mkdir $webapps/$rootdir
  echo "$rootdir 目录创建完成"
  # 复制目标目录下的代码到webapps目录下的rootdir目录下
  cp -r $target/* $webapps/$rootdir
  echo "新代码复制完成"
  echo "代码部署完成"
else
  # 用户输入不为y或Y,取消部署
  echo "取消部署,退出脚本"
  exit 1
fi

# 重新启动tomcat
echo "重新启动tomcat"
# 提示用户输入确定
read -p "请输入y或Y表示确定,其他任意键表示取消:" confirm
# 判断用户输入是否为y或Y
if [ "$confirm" == "y" ] || [ "$confirm" == "Y" ]; then
  # 停止所有java进程前请先打印出要停止的java进程信息
  # 用ps命令和grep命令查找所有java进程,用awk命令输出进程ID和命令行
  echo "要停止的java进程信息如下:"
  ps -ef | grep java | awk '{print $2, $8, $9, $10}'
  # 停止所有java进程,用killall命令
  killall java
  echo "所有java进程停止完成"
  # 启动tomcat
  $start
  echo "tomcat启动完成"
  # 启动tomcat后请打印相关的java进程信息
  # 用ps命令和grep命令查找相关的java进程,用awk命令输出进程ID和命令行
  echo "相关的java进程信息如下:"
  ps -ef | grep $start | awk '{print $2, $8, $9, $10}'
else
  # 用户输入不为y或Y,取消重启
  echo "取消重启,退出脚本"
  exit 1
fi

# 打印结束信息
echo "shell脚本执行结束"

这是脚本的使用文档:

  • 你需要把这个脚本保存为一个.sh文件,比如script.sh,然后给它可执行的权限,用chmod +x script.sh命令。
  • 你需要在你的代码所在的目录下运行这个脚本,用./script.sh命令。
  • 你需要确保你的git仓库的地址、分支名、目标目录、webapps目录和启动脚本都是正确的,否则可能会出现错误或异常。
  • 你需要注意,这个脚本会在部署代码和重启tomcat之前提示你输入确定,你可以输入y或Y表示确定,其他任意键表示取消。如果你取消了,脚本会退出,不会继续执行后面的步骤。
  • 你需要注意,这个脚本会在停止所有java进程前和启动tomcat后打印出相关的java进程信息,你可以根据这些信息检查你的操作是否正确。

我希望这个脚本对你有帮助。如果你有任何问题或建议,欢迎你再次联系我。😊

源: 与必应的对话, 2023/11/30 (1) linux - List of Java processes - Stack Overflow. https://stackoverflow.com/questions/6283167/list-of-java-processes. (2) Find the process id of a java application in a bash script (to see if .... https://unix.stackexchange.com/questions/81176/find-the-process-id-of-a-java-application-in-a-bash-script-to-see-if-the-target. (3) How to print the shell script terminal output in java. https://stackoverflow.com/questions/49433712/how-to-print-the-shell-script-terminal-output-in-java. (4) undefined. http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html.