LinuxSir.cn,穿越时空的Linuxsir!

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

如何向文件递参数,并动态显示文件内容[基本解决]

[复制链接]
发表于 2004-4-5 19:39:58 | 显示全部楼层 |阅读模式
如我有一文件a.cmd内容如下
#a.cmd
NAME:linux
IP:192.168.0.1

一个shell文件my.sh,这个shell执行时要以a.cmd这个文件为参数.
即my.sh a.cmd
但现在a.cmd中的NAME和IP是动态的,由另外一个程序update生成,update的执行
结果是输入出一行name和ip,如
linux 192.168.0.1
现在要把这三个文件整合成一个shell。把update的执行结果传给a.cmd,然后my.sh执行这个a.cmd(已传参数) 文件。

思路一:修改update,让它直接生成a.cmd文件,然后my.sh执行a.cmd。
因为update是每几秒就要执行一次的,这样就会平繁的写a.cmd文件,而事实上
a.cmd文件也不像上面这样简单。所以不想用这种办法。
思路二:
我把a.cmd改成这样
#a.cmd
NAME1
IP2

$1,$2想由update的输出传过来。然后my.sh再执行这个a.cmd($1,$2已经赋值)
这个思路我不知道用shell如何实现,请高手提供一下方法或其它好的思路.
发表于 2004-4-5 20:02:21 | 显示全部楼层
是这个意思么?
  1. while :;do
  2.         var1=$(update|grep/awk/sed ...如name)
  3.         var2=$(update|grep/ask/sed ... 如IP)
  4.         my.sh $var1 $var2
  5.         sleep n
  6. done
复制代码
 楼主| 发表于 2004-4-8 15:24:12 | 显示全部楼层
var1 和 var2传给 a.cmd这个文件,
然后 my.sh 执行 a.cmd 这个文件。
发表于 2004-4-8 18:19:42 | 显示全部楼层
能否把这3个脚本丢上来瞧瞧。
发表于 2004-4-8 18:32:45 | 显示全部楼层
最初由 johnpanq 发表
var1 和 var2传给 a.cmd这个文件,
然后 my.sh 执行 a.cmd 这个文件。

a.cmd是什么文件?
 楼主| 发表于 2004-4-10 12:06:02 | 显示全部楼层
a.cmd是一个有固定格式的普通文件。
如:
#-----------------
NAME:linux
IP:192.168.0.1
#------------------
而my.sh是一个shell文件,用来读取a.cmd文件中的内容。执行时要以a.cmd这个文件为参数。如:
[root@root]$my.sh a.cmd
如果我有多个内容要更新,就要不断修改a.cmd中的 NAME和IP值。
update是一个c程序,用来生成NAME和IP的。
当执行update时,它会动态输出一行NAME 和 IP
如:
[root@root]$update
[root@root]linux 192.168.0.1
我的意思是能否让update文件输出的两个值(name 和 ip)作为参数传给a.cmd这个文件,然后my.sh再执行a.cmd这个文件。
发表于 2004-4-10 12:41:08 | 显示全部楼层
既然update为数据来源,何必弄个a.cmd中间文件呢,使用gawk(gawk在操作文件方面比传统awk更安全)保存备份为a.cmd(这个a.cmd作为日志还是有价值的),同时又原样输出给my.sh。

  1. #!/bin/sh
  2. while :;do
  3.         update | gawk 'BEGIN{print "#-----------------" > "john"}{print "NAME:"$1 > "john"; print "IP:"$2 > "john"; print $1,$2}END{print "#-----------------" > "john"}' |while read arg1 arg2;do my.sh $arg1 $arg2; done
  4.         sleep n
  5. done
复制代码
发表于 2004-4-11 10:27:53 | 显示全部楼层
改用了awk,现在能满足楼主所有要求了,请楼主重温上帖。:cool:
发表于 2004-4-11 21:05:11 | 显示全部楼层
要做日志,最好用>>对文件进行追加操作。
楼主的my.sh接收a.cmd参数,需要修改才能用。
还有
  1. while read arg1 arg2;do my.sh $arg1 $arg2; done
复制代码

这样用更好
  1. { read arg1 arg2; my.sh $arg1 $arg2; }
复制代码
发表于 2004-4-11 21:11:10 | 显示全部楼层
最初由 r2007 发表
要做日志,最好用>>对文件进行追加操作。
楼主的my.sh接收a.cmd参数,需要修改才能用。
还有
  1. while read arg1 arg2;do my.sh $arg1 $arg2; done
复制代码

这样用更好
  1. { read arg1 arg2; my.sh $arg1 $arg2; }
复制代码

嗯,r2007补充得好。以后编写脚本的确要注意这类问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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