使用shell

时间:2015-08-25 21:11:18

标签: sql shell

我正在尝试创建一个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

3 个答案:

答案 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。

如果您想了解某些细节,请发布您的输入数据样本以及最终要执行的命令。