LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1614|回复: 5

请问:怎么读出文件中的内容并输出给scp调用?

[复制链接]
发表于 2003-4-23 17:48:11 | 显示全部楼层 |阅读模式
我在这里详细说明一下我的问题:
我有一批ip地址的列表文件:1.txt、2.txt、3.txt……,文件的内容如下:

$cat 1.txt

211.101.24.xxx
211.101.24.xx
211.100.25.xxx
211.100.25.xxx
...

其它的文件内容也类似,然后我希望实现一个scp操作,就是把某一个文件批量scp到一批服务器上,服务器ip列表从上述文件中的某一个读取
本来这个问题分开来看是不难的,读取文件内容我想用sed或者awk就能实现,scp命令写法也不复杂,但问题是我不知道如何把sed出来的内容送给scp,因为我看了一些有关sed和awk方面的介绍(包括本站的推荐)好像都没有提到类似问题的,而且因为每个ip列表文件中的ip数目也不一样,有的只有七八个,有的有十好几个,如果用循环实现批量scp的话我也觉得循环判断也不太好写,请各位dx指点迷津,提示一下解决的思路就行,拜谢了~!!
发表于 2003-4-23 18:30:22 | 显示全部楼层
如何把sed出来的内容送给scp
scp是什么? 一个命令,还是一个文件? sed处理后的内容可以用>重定向到一个文件呀~,如果是一行一行的读取,也可以用exec 3<file1...filen和read -u3 varlue 配合使用.
 楼主| 发表于 2003-4-23 19:10:45 | 显示全部楼层

回版主:

scp是ssh的拷贝命令,用来在两台服务器之间拷贝文件,命令格式如下:

scp 源文件 目标服务器ip:目的路径

举例如下:

$scp /home/guest/a  211.100.25.48:/etc/sysconfig/b.sh

这行命令将本机/home/guest/下的文件a拷贝到远程机器211.100.25.48的/etc/sysconfig/下,并命名成b.sh

现在回到我上面的问题:目的ip存放在一个个文件里,用户需要作这样的批量传输时,执行shell,后跟相应的服务器列表文件名,然后shell自动读出相应文件下的ip然后依次开始传送文件,以上如何实现?

我曾经在实验的shell中写了如下的两句:

read P

scp /home/guest/a  $sed`{}`$P.txt:/home/jzzhg5/gmsv/test

但执行时报错,看起来应该用循环实现,但我不知道该如何写,主要还是对sed和awk不熟悉,所以请大家赐教~!
发表于 2003-4-23 20:46:15 | 显示全部楼层
恕小弟愚昧,不好意思,没有用过scp命令,;)
呵~~晕!
不知道这样的思路是否行
把所有的(1.txt 2.txt....)作为for中的一个列表来处理呢?
for i in $(cat 1.txt)
do
scp 源文件 $i 目标路径/文件
done
这样的结果就是把源文件按照不同的IP地址发送出去,??!!
 楼主| 发表于 2003-4-23 21:57:47 | 显示全部楼层

哦呵~~~

多谢版主指点,成功了~!

呵呵,因为我接触shell编程没多久,对很多东西不了解,按照以前的经验,本来以为for循环只对具体整数浮点数或者字符有效,没想到这里的for如此强大,连ip地址这种形式的字符串都支持,看来我药学的还有很多

再次感谢~!
发表于 2003-4-23 22:10:08 | 显示全部楼层
也谢谢你兄弟,看来linux的命令还得苦学哟!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表