Ich erstelle ein Shell-Skript zum Lesen des Benutzers und Projektnamen aus .csv-Datei und fügen Sie den Benutzer ist config.xml-Datei.Lesen von .csv-Datei mit Shell-Skript breaking bedingte Schleife Logik
Unten finden Sie die XML-Beispieldatei
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<authorizationStrategy>
<roleMap type="globalRoles">
<role name="Employee" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>cde</sid>
<sid>user1</sid>
</assignedSIDs>
</role>
</roleMap>
<roleMap type="projectRoles">
<role name="project_a">
<permissions/>
<assignedSIDs>
<sid>abc</sid>
<sid>cde</sid>
<sid>user1</sid>
</assignedSIDs>
</role>
<role name="project_b">
<permissions/>
<assignedSIDs>
<sid>abc</sid>
<sid>cde</sid>
</assignedSIDs>
</role>
</roleMap>
</authorizationStrategy>
</hudson>
Im Folgenden wird der Code-Schnipsel
while IFS=',' read -r user projectName;
do
echo "start"
echo "userid is : $user"
echo "projectRoles is: $projectName"
#check if user is present in global role
a=$(xmlstarlet sel -t -v "/hudson/authorizationStrategy/roleMap[@type='globalRoles']/role[@name='Employee']/assignedSIDs/sid = '$user'" config.xml)
b=true
c=$(xmlstarlet sel -t -v "/hudson/authorizationStrategy/roleMap[@type='projectRoles']/role[@name='$projectName']/assignedSIDs/sid='$user'" config.xml)
d=true
if [ $a -eq $b ];
then
echo " $user is present in global roles"
#Check if the user is present in project role
if [ $c -eq $d ];
then
echo " Cannot add $user, as it is already present in $projectName "
else
echo "$user has been added to project"
echo " To step out of the script, press CTRL + c key "
fi
else
echo " $user is not present in global roles"
fi
sleep 3;
done <addExcelUser.csv
Fragen, die ich bin vor: 1) die Variable "c" ausgegeben false, wenn ich es innerhalb der while-Schleife verwende, aber wenn ich es verwende, ohne den Befehl zu verwenden, um die .csv-Datei zu lesen, zeigt es "true". deswegen geht meine ganze Logik schief.
für zB: user1 ist in der globalen Rolle und in project_a vorhanden, also zeigt die Variable "a" den Wert true, und wenn sie mit der Variablen b in if Ausdruck verglichen wird, ergibt sie true. aber Variable c zeigt false, auch wenn der Benutzer1 in dieser Projektrolle (project_a) vorhanden ist. Idealerweise sollte es stimmen.
Meine Vermutung ist das irgendwo die Schleife bricht beim Lesen .csv-Datei und macht die ganze Logik falsch.
Bitte helfen Sie mit Ihrem Fachwissen.
ich verwendet 'if [[" $ a "-eq" $ b "]];' und der Fehler "True: Integer-Ausdruck erwartet" ist jetzt weg. Aber nur zuerst, wenn die Bedingung korrekt ausgegeben wird.next, wenn die Bedingung eine falsche Ausgabe anzeigt. –