我知道有辦法做到這一點,但我現在似乎不記得了。我有一個小的 shell 腳本,它有一個簡單的 while 回圈,它遍歷一個 CSV 檔案并在其中有一個 if else 回圈。問題是對于每一行,while 回圈迭代 if else 陳述句列印找不到匹配項,直到找到匹配項,或者在到達檔案末尾之前一直列印不匹配項。我想檢查如何在遍歷整個檔案后僅列印一次找到的不匹配項。這是我下面的示例代碼
while IFS=, read -r path servicename app text1 text2 text3;
do
text1="$key1"
text2="$key2"
text3="$key3"
if [[ $servicename = $SERVICE_NAME ]];
then
if [[ $ENV = "sb" ]]; then
ID="$key1"
elif [[ $ENV = "lb" ]]; then
ID="$key2"
elif [[ $ENV = "dev" ]]; then
ID="$key3"
fi
else
echo "no match found"
fi
done < $input_file
迭代中使用的樣本資料
path,service,app,text1,text2,text3
path/of/service1,servicename1,appname,key1,key2,key3
path/of/service2,servicename2,appname,key1,key2,key3
path/of/service3,servicename3,appname,key1,key2,key3
path/of/service4,servicename4,appname,key1,key2,key3
path/of/service5,servicename5,appname,key1,key2,key3
uj5u.com熱心網友回復:
使用一個變數來跟蹤是否找到匹配項,并僅在最后顯示訊息。
像這樣:
#!/bin/bash
SERVICE_NAME="blablabla"
ENV="blablabla"
input_file="input.txt"
match_found="no"
while IFS=, read -r path servicename app text1 text2 text3
do
text1="$key1"
text2="$key2"
text3="$key3"
if [[ "$servicename" == "$SERVICE_NAME" ]]
then
match_found="yes"
if [[ "$ENV" == "sb" ]]
then
ID="$key1"
elif [[ "$ENV" == "lb" ]]
then
ID="$key2"
elif [[ "$ENV" == "dev" ]]
then
ID="$key3"
fi
fi
done < "$input_file"
if [[ "$match_found" == "no" ]]
then
printf "No match found\n"
fi
另外幾個修改:
==在 if 條件中使用以檢查文本是否匹配- 所有使用的變數都用雙引號引起來
- 我不得不將幾個全域變數設定為一些虛假值來測驗我的答案。當您提出問題時,您應該提供完整的最小樣本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473093.html
