2015-04-22 136 views
0

我有下面的while循環使用變量pov。我需要將每行設置爲一個可以在連接字符串中調用的變量,但無法弄清楚如何創建一個循環來分別爲每行提供數據。使用變量while while循環bash

if [ ! -z $pov] then .../shell to execute using $pov... fiseq_fy.txt

每一行我所用的工作:

cat seq_fy.txt | while read pov; do 
echo "pov$((n++))=$pov" 
###wanting "if [ ! -z $pov] then <execute> fi" for each line in seq_fy.txt 
done 

$ ./while_loop_only 
pov0= 
pov1=SPT_SEQ_010,FY15 
pov2=SPT_SEQ_010,FY16 
pov3=SPT_SEQ_020,FY15 
pov4=SPT_SEQ_020,FY16 
pov5=SPT_SEQ_030,FY15 
pov6=SPT_SEQ_030,FY16 
pov7=SPT_SEQ_040,FY15 
pov8=SPT_SEQ_040,FY16 
pov9=SPT_SEQ_050,FY15 
pov10=SPT_SEQ_050,FY16 
+0

你需要在這裏做什麼?你爲什麼注意順序命名的變量?你真的需要用'$ pov'的值在那個循環中運行什麼命令? –

+0

請查看[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Cyrus

+0

它調用OWS ...我不必將它定義爲POV,但我需要將每行的值作爲變量運行商業模型。現在,在單獨的if語句中,我執行以下操作(導出pov1後):export pov = $ {pov01 // \「/} $ owsdirectory」/hpm_ws_client.sh「processCalcScriptOptions」$ appName「」$ pov「」 $ layers「」$ stages「」「」$ stages「」$ stages「FALSE>」$ appLogFolder「」/「」$ step「」_ ProcessID.log「 –

回答

1

貌似我一直這樣過分析這個.... 基本上我並不需要什麼與POV或導出變量在所有,只是簡單地把命令放在while循環中,並在$行中進行,並似乎按預期工作

cat fiename.txt | while read line; do 
$owsdirectory"/hpm_ws_client.sh" processCalcScriptOptions "$appName" "$line" "$layers" "$stages" "" "$stages" "$stages" FALSE > "$appLogFolder""/""$line""_ProcessID.log" 
done 
+1

這就對了。不想處理空的參數,添加'if [-n「$ line」];然後... command ...; fi'注意'['命令名稱及其匹配的']'最後一個參數和變量周圍的引號習慣引用變量;它通常是正確的在你的代碼中,如果最好寫''$ owsdirectory「/ hpm_ws_client.sh'或''$ owsdirectory/hpm_ws_client.sh「',再次用雙引號括住變量。日誌文件名可以從''$ appLogFolder「」/「」$ line「」_ ProcessID.log「'簡化爲'」$ appLogFolder/$ {line} _ProcessID.log「'。 –