[英]Reading .csv file using shell script breaking conditional loop logic
我正在創建一個Shell腳本以從.csv文件讀取用戶和項目名稱,並將用戶添加為config.xml文件。
以下是示例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)當我在while循環內使用它時,變量“ c”的輸出為false,但是當我不使用while命令讀取.csv文件而使用它時,它顯示為true。 因此,我的整個邏輯都出錯了。
例如:user1出現在全局角色和project_a中,因此變量“ a”顯示為true,並且與if表達式中的變量b比較時,結果為true。 但是即使user1以該項目角色(project_a)存在,變量c仍顯示為false。 理想情況下,它應該是真實的。
我的猜測是在讀取.csv文件並使整個邏輯出錯時循環中斷的地方。
請協助您的專業知識。
我想出了答案。 我的腳本的問題是if [ $a -eq $b ];
環。
通過此鏈接,我了解了如何使用[[]]處理此類異常。
我使用if [[ "$a" = "$b" ]]
表達式來評估條件,該條件導致結果為true並使我的邏輯起作用。 大家都歡迎任何有關最佳做法的建議。 我有很多東西要學:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.