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