1、前言
需要编写一个shell脚本支持
1、修改.so文件名
2、修改配置文件
3、执行jar包
2、代码解析
2.1、修改.so文件名
so_file_dir="/opt/casb/xxx/lib"
# 处理.so文件
cd "$so_file_dir" || { echo "错误: 无法进入目录 $so_file_dir"; exit 1; }
if [ -e "libCSCipherJNI-release-2.3.8.so" ]; then
echo "目标.so文件已存在"
else
so_files=(libCSCipherJNI-release-*.so)
if [ -e "${so_files[0]}" ]; then
mv "${so_files[0]}" libCSCipherJNI-release-2.3.8.so
echo "已重命名.so文件"
else
echo "错误: 未找到匹配的.so文件"; exit 1
fi
fi
2.2、修改配置文件(难点在这个,要注意前后空格)
这里不注意空格,容易导致找不到配置项
# 复制配置文件
if [ -e "$source_file" ]; then
cp "$source_file" "$target_file"
echo "已复制配置文件"
else
echo "错误: 源配置文件不存在"; exit 1
fi# 替换配置项
cp "$target_file" "${target_file}.bak"# 安全转义字符串中的特殊字符
escape_sed() {
echo "$1" | sed -e 's/[\/&]/\\&/g'
}# 替换函数(带逗号后缀)
replace_property_comma() {
local config_name="$1"
local config_value="$2"
local escaped_name=$(escape_sed "$config_name")
local escaped_value=$(escape_sed "$config_value")
# 查找配置项(忽略等号周围空格)
local existing_line=$(grep -E "^[[:space:]]*$escaped_name[[:space:]]*=[[:space:]]*" "$target_file")
if [ -n "$existing_line" ]; then
# 提取当前配置项的值部分(考虑等号周围的空格)
current_value=$(echo "$existing_line" | sed -E "s/^[[:space:]]*$escaped_name[[:space:]]*=[[:space:]]*//")
# 如果当前值和要设置的值不同,才进行替换
if [ "$current_value" != ",$escaped_value,,,,,," ]; then
# 使用更灵活的正则表达式匹配(忽略等号周围空格)
sed -i.bak -E "s/^([[:space:]]*$escaped_name[[:space:]]*=[[:space:]]*).*/\1,$escaped_value,,,,,,,/" "$target_file"
echo "✓ 已更新: $config_name=,$escaped_value"
else
echo "配置项 $config_name 值未改变,无需更新"
fi
else
echo "⚠️ 配置项 $config_name 不存在,跳过修改"
fi
}# 替换函数(直接为值,不带逗号)
replace_property_value() {
local config_name="$1"
local config_value="$2"
local