我有一个xml文件:config.xml,其中包含以下标记:
<roleMap type="globalRoles">
<role name="ABC Employee" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>cde</sid>
<sid>efg</sid>
</assignedSIDs>
</role>
</roleMap>
<roleMap type="projectRoles">
<role name="Proj1" pattern="Proj1.*">
<permissions/>
<assignedSIDs>
<sid>abc</sid>
<sid>jkl</sid>
</assignedSIDs>
</role>
<role name="Proj2" pattern="Proj2.*">
<permissions/>
<assignedSIDs>
<sid>hij</sid>
<sid>cde</sid>
</assignedSIDs>
</role>
<role name="Proj3" pattern="Proj3.*">
<permissions/>
<assignedSIDs>
<sid>zxc</sid>
<sid>efg</sid>
</assignedSIDs>
</role>
</roleMap>
它包含两个roleMap标签类型:globalRoles和projectRoles。
到目前为止,我已经能够使用以下shell脚本在globalRoles和projectRoles中添加用户:
read -p 'Enter UserName and projectName :' user projectName
echo -e "user name :$user project name :$projectName"
xmlstarlet ed -P -S -s "/hudson/authorizationStrategy/roleMap
[@type='globalRoles']/role[@name='ABC Employee']/assignedSIDs"
-t elem -n sid -v $user -s "/hudson/authorizationStrategy/roleMap
[@type='projectRoles']/role[@name='$projectName']/assignedSIDs" -t elem
-n sid -v $user config.xml >me1.xml
mv config.xml config_old.xml
mv me1.xml config.xml
我需要的是在脚本中包含一些条件,这对我有帮助:
1)验证xml文件(是否所有标签都关闭。)
2)查找$ user是否已经存在于全局角色中。 (如果用户已经存在于全局角色中,则脚本不应添加用户并发出警告&#34;用户已存在于全局角色中#34;)。
3)查找用户是否已经存在于特定项目的projectRoles中(如果用户出现在特定项目中,则脚本必须发出警告&#34;用户已经存在于该特定项目中#34;)。
我不确定哪个命令可用于验证xml文件中的标记。 (我正在考虑使用grep命令或awk)。
答案 0 :(得分:0)
首先感谢大家的意见。
首先,我使用以下命令验证xml文件:
xmlstarlet val -w config.xml
然后,我在if .. else .. fi条件循环中使用grep命令来验证xml文件中的用户。
if(echo $user | grep -o -q "$user" config.xml).... then... else... fi.