私は、.csvファイルからユーザーとプロジェクト名を読み込み、ユーザーをconfig.xmlファイルに追加するためのシェルスクリプトを作成しています。以下はシェルスクリプトを使用して.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" の出力がされます私はループ中にそれを使用しているときはfalseですが、whileコマンドを使わずに.csvファイルを読み込むと、trueを示します。 これは私の全論理が間違っているためです。
などのため:user1がグローバルな役割とproject_aに存在しているので、変数「」真示し、変数bと比較した場合、if式では、それは本当の結果。 しかし、user1がそのプロジェクトロール(project_a)に存在する場合でも、変数cはfalseを示します。理想的には真実であるべきです。
私の推測では、.csvファイルを読み取り、全体の論理は間違っながらループが破壊されてどこかにあります。
あなたの専門知識をお助けください。
私は '[[" $ ""] "$ b"]];を使用し、エラー "真:整数表現が期待されている"しかし、条件が間違った出力を示している場合は、最初に条件が正しいoutput.nextを取得しています。 –