bingdele 发表于 2016-01-13 11:49

求助:shell+mysql的问题,大神进来瞧瞧

我的问题如下:

我有一个循环,在shell中,循环体为:
之前脚本为:
mysql -h x.x.x.x -uxxx -pxxx test<<EOF
load data infile '/tmp/1.rep' replace into table history;
exit
EOF
mysql -h x.x.x.x -uxxx -pxxx test<<EOF
load data infile '/tmp/2.rep' replace into table history;
exit
EOF
mysql -h x.x.x.x -uxxx -pxxx test<<EOF
load data infile '/tmp/3.rep' replace into table history;
exit
EOF
现在我想改为弄个循环,将1.rep 2.rep 3.rep循环入test库的history表,如何实现?因为不确定有多少个rep文件要处理
谢谢

seesea2517 发表于 2016-01-13 13:29

回复 1# bingdele


    如果确定有几个文件的话,你试试这样,放在循环里:for i in 1.rep 2.rep 3.rep
do
    mysql -h x.x.x.x -uxxx -pxxx test<<EOF
    load data infile '/tmp/$i' replace into table history;
    exit
EOF
done我习惯用 -e 参数带上执行语句:for i in 1.rep 2.rep 3.rep
do
    mysql -h x.x.x.x -uxxx -pxxx test -e "load data infile 'tmp/$i' replace into table history;"
done如果不管几个文件,只在目录下搜索的话,可以试试这个:for i in `ls -1 /tmp/*.rep`
do
    # 用 -e 参数:mysql -h x.x.x.x -uxxx -pxxx test -e "load data infile 'tmp/$i' replace into table history;"
    mysql -h x.x.x.x -uxxx -pxxx test<<EOF
    load data infile '/tmp/$i' replace into table history;
EOF
done

lyhabc 发表于 2016-01-13 18:28

@seesea2517
问一下,-e参数和他的<<EOF有什么区别呢

seesea2517 发表于 2016-01-14 09:50

回复 3# lyhabc


    效果是完全一样的啦,就是少打前后的 EOF :)

lyhabc 发表于 2016-01-14 10:17

@seesea2517
我们一般
cat >1.txt <<EOF

<EOF
做输入重定向的
但是,mysql居然也可以这样用。。。

seesea2517 发表于 2016-01-14 10:38

回复 5# lyhabc


    是啊,mysql 我也从来没有用 EOF 玩过 :emn23:

bingdele 发表于 2016-01-15 16:02

感谢你,经过测试OK,谢谢 回复 2# seesea2517


   

seesea2517 发表于 2016-01-15 16:38

回复 7# bingdele


    客气客气~

Shell_HAT 发表于 2016-01-19 20:12

回复 2# seesea2517


    遇到带空格的文件名会出问题:mrgreen:

seesea2517 发表于 2016-01-20 10:57

回复 9# Shell_HAT


    {:qq21:} {:qq12:} 这个。。。呃。。。楼主应该不会遇到吧 {:qq23:}
页: [1]
查看完整版本: 求助:shell+mysql的问题,大神进来瞧瞧