簡體   English   中英

使用Shell腳本讀取條件循環邏輯讀取.csv文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM