我正在創建一個shell腳本以從.csv文件讀取用戶名和項目名,並添加用戶名爲config.xml文件。使用shell腳本讀取.csv文件打破條件循環邏輯
下面是示例xml文件
<?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>
下面是代碼段,其我面臨
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
問題: 1)變量 「c」 輸出是當我在while循環中使用它時爲false,但是當我使用它而沒有使用while命令讀取.csv文件時,它顯示爲true。因爲這個,我的整個邏輯出錯了。
例如:user1存在於全局角色和project_a中,所以變量「a」顯示爲真,並且如果與if表達式中的變量b比較,則結果爲真。 ,但即使user1存在於該項目角色(project_a)中,變量c也顯示爲false。理想情況下,這應該是真的。
我的猜測是在閱讀.csv文件並使整個邏輯錯誤時,循環崩潰的地方。
請幫助您的專業知識。
我使用了'if [[「$ a」-eq「$ b」]];'和錯誤「true:整數表達式期望」現在不見了。但是,如果條件顯示錯誤的輸出,則只有當條件得到正確的output.next時纔是第一個。 –