在Linux环境下的自动化任务中,通过Shell脚本生成XML文件是非常常见的需求,无论是配置导出、数据备份还是接口数据准备,都可以通过Shell脚本快速实现XML文件的生成。下面将通过多个实例详细介绍具体的实现方法。

基础XML文件生成方法
最简单的生成方式是通过echo命令逐行拼接XML内容,再重定向到目标文件中。这种方式适合结构固定、内容简单的XML文件生成场景。
#!/bin/bash # 定义输出文件路径 output_file="test.xml" # 生成XML内容 echo '<?xml version="1.0" encoding="UTF-8"?>' > $output_file echo '<root>' >> $output_file echo ' <user>' >> $output_file echo ' <name>张三</name>' >> $output_file echo ' <age>25</age>' >> $output_file echo ' </user>' >> $output_file echo '</root>' >> $output_file echo "XML文件生成完成,路径:$output_file"
运行上述脚本后,会在当前目录生成test.xml文件,内容符合标准XML格式。注意XML中的标签符号<和>在Shell字符串中不需要额外转义,直接写入即可。
动态内容生成XML
实际场景中往往需要结合变量动态生成XML内容,比如从其他文件读取数据、接收脚本参数等,下面是通过变量拼接生成XML的示例。
#!/bin/bash
# 接收外部传入的参数
user_name=$1
user_age=$2
output_file=$3
# 校验参数是否完整
if [ -z "$user_name" ] || [ -z "$user_age" ] || [ -z "$output_file" ]; then
echo "参数不完整,请传入用户名、年龄、输出文件路径"
exit 1
fi
# 动态生成XML内容
echo '<?xml version="1.0" encoding="UTF-8"?>' > $output_file
echo '<root>' >> $output_file
echo " <user>" >> $output_file
echo " <name>$user_name</name>" >> $output_file
echo " <age>$user_age</age>" >> $output_file
echo ' </user>' >> $output_file
echo '</root>' >> $output_file
echo "动态XML文件生成完成"
运行时可以通过./script.sh 李四 30 dynamic.xml的方式传入参数,脚本会自动将传入的用户名和年龄写入XML文件中。
特殊字符转义处理
当XML内容中包含<、>、&等特殊字符时,需要按照XML规范进行转义,否则生成的XML文件会出现格式错误。下面是实现特殊字符转义的示例。
#!/bin/bash
# 定义转义函数,处理XML特殊字符
escape_xml() {
local str=$1
str=${str//&/&}
str=${str//</<}
str=${str//>/>}
str=${str//"/"}
str=${str//'/'}
echo "$str"
}
# 待处理的原始内容,包含特殊字符
raw_content="内容&符号"
safe_content=$(escape_xml "$raw_content")
output_file="escape.xml"
echo '<?xml version="1.0" encoding="UTF-8"?>' > $output_file
echo '<root>' >> $output_file
echo " <content>$safe_content</content>" >> $output_file
echo '</root>' >> $output_file
echo "带特殊字符的XML文件生成完成"
上述脚本中的escape_xml函数会将输入的字符串中的XML特殊字符全部替换为对应的转义序列,确保生成的XML文件格式合法。
批量生成XML文件
如果需要从数据源批量生成多个XML文件,可以结合循环逻辑实现。以下示例从文本文件读取用户数据,批量生成对应的XML文件。
#!/bin/bash
# 数据源文件,每行格式为:用户名,年龄
data_file="user_list.txt"
# 读取数据源文件,逐行处理
while IFS=',' read -r name age; do
# 跳过空行
if [ -z "$name" ]; then
continue
fi
# 定义当前用户的输出文件
output_file="${name}.xml"
echo '<?xml version="1.0" encoding="UTF-8"?>' > $output_file
echo '<root>' >> $output_file
echo ' <user>' >> $output_file
echo " <name>$name</name>" >> $output_file
echo " <age>$age</age>" >> $output_file
echo ' </user>' >> $output_file
echo '</root>' >> $output_file
echo "已生成文件:$output_file"
done < $data_file
假设user_list.txt文件内容为:
张三,25 李四,30 王五,28
运行脚本后会生成三个XML文件,分别对应三个用户的信息。
生成XML的注意事项
- XML文件开头必须包含声明
<?xml version="1.0" encoding="UTF-8"?>,确保编码格式正确 - 所有标签必须正确闭合,嵌套关系要符合XML规范
- 内容中的特殊字符必须提前转义,避免破坏XML结构
- 生成文件时注意文件权限,避免后续无法读取或修改