我正在尝试创建一个shell脚本。它将一次读取一行,将值分配给宏,然后使用宏运行查询。查询完成后,它将读取第二行,创建宏,运行查询... 我开发了下面的代码,但它会一起读取所有行,然后运行查询。我应该使用do i = 1到n吗?
#!/bin/sh
$HOME/.profile
file=$1
OutputTable=$2
file=rule_flg.txt
cat $file|(
read flg table_num rule_num
while test "$flg" != ""
do
echo table_num is $table_num and rule_num is $rule_num
echo time is `date`
(here are some parameters of database)... -v flg=$flg -v table_num=$table_num -v rule_num=$rule_num -f query_1.sql &> query_1.log
read flg table_num rule_num
done
)
echo run finished!
exit 0
答案 0 :(得分:2)
而不是您描述的内容,如何使用while IFS= read -r flg table_num rule_num
echo "table_num is $table_num and rule_num is $rule_num"
echo "time is `date`"
(here are some parameters of database)... -v flg=$flg -v table_num=$table_num -v rule_num=$rule_num -f query_1.sql &> query_1.log
done < "$file"
语法逐行读取文件?
这样,每次迭代都只包含当前行的数据。
echo "$var"
您可以阅读here。
找到更多详情另请注意,引用您正在使用的任何变量都是好的,以防止格式化问题等。所以说echo $var
代替$(document).ready(function(){
$(".prof_button").click(function(){
$(this).next('.par_tab').slideToggle();
});
});
,除非您确定不需要它
答案 1 :(得分:0)
所以你的问题似乎是 - “我编写的脚本将读取所有行,然后运行查询,但我希望它为每行读取一次查询”
由于您的脚本不完整或可测试,我无法真正调试它。 :)
然而,它有点过于复杂。由于您不需要在子shell外部获取变量或其他shell数据,因此您只需执行cat $file | while read vars; do echo $vars;done
类型的操作。
while read
会将每行输入读入一个变量(或一组变量),并为每一行执行一次循环的内部部分。
用于显示脚本的黑客版本:
#!/bin/sh
file=rule_flg.txt
echo "1 2 3" > $file
echo "3 4 5" >> $file
echo "4 5 6" >> $file
cat $file | while read flg table_num rule_num
do
echo table_num is $table_num and rule_num is $rule_num
#do your other things here
done
产生
%% sh whileread.sh
table_num is 2 and rule_num is 3
table_num is 4 and rule_num is 5
table_num is 5 and rule_num is 6
现在,还有很多方法可以解决这个问题 - 对于你发送超过3个参数来读取它们的情况没有处理(它们会被填入$rule_num
...)但是假设你的输入数据始终以空白/制表符分隔为3列,应该是一个良好的开端。
答案 2 :(得分:0)
我会采取另一种方法。由于awk
是POSIX的一部分,我敢于忽略你对shell的要求。
一般模式:
awk 'prog' inputfile | sh
所以你用awk
写下重复的陈述。当您对结果感到满意时,将其传递给sh。
如果您想了解某些细节,请发布您的输入数据样本以及最终要执行的命令。