2015-04-22 137 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“'。 –