Chinaunix

标题: 求教shell脚本~ [打印本页]

作者: reborts_linux    时间: 2012-02-23 23:30
标题: 求教shell脚本~
有10个IP地址或者更多   1.2.3.1---1.2.3.10----,如何将IP用脚本赋予到下面列表中:
++ t1
menu = t1
title = 1.2.3.1
host = 1.2.3.1

++ t2
menu = t2
title = 1.2.3.2
host = 1.2.3.2
......
......
...... 以此类推,中间省略掉了
......
......
++ t10
menu = t10
title = 1.2.3.10
host = 1.2.3.10
.......
.......
.......
.......
坐等答案,求高手指教~!
作者: reborts_linux    时间: 2012-02-23 23:36
目前只做到效果


for i in {1..10}
do
    echo -e "++ t${i}" >> config
    echo -e "menu = t${i}" >> config
    echo -e "title = " >> config
    echo -e "host = " >> config
    echo ""
done

ip 不知道怎么弄进去~!!求解答
作者: reborts_linux    时间: 2012-02-24 00:12
没人回答,无奈之下将ip地址编号,更改脚本如下:

ip.txt内容:
        1 1.2.3.1
        2 1.2.3.2
        3 1.2.3.3
        4 1.2.3.4
        5 1.2.3.5
        6 1.2.3.6

shell脚本:

for i in {1..6}
do
    echo -e "++ t${i}" >> config
    echo -e "menu = t${i}" >> config
    echo -e "title = ${i}" >> config
    echo -e "host = ${i}" >> config
    echo ""
        for j in `cat ip.txt|awk '/^'${i}'/ {print $2}'`
        do
                sed -i 's#= '${i}'# = '${j}'#' ./config
        done
done

虽然问题得以解决,但还想知道有没有高手弄出更简单的方法!~ 继续期望下面牛掰的答案。
作者: justfate    时间: 2012-02-24 14:42
#!/bin/sh


ip="1.2.3."

for i in {1..10}
do
    echo -e "++ t$i" >> config
    echo -e "menu = t$i" >> config
    echo -e "title = $ip$i" >> config
    echo -e "host = $ip$i" >> config
    echo ""
done
作者: chenlinbo5588    时间: 2012-02-24 15:16
[clb@localhost sh]$ cat iplist
1.2.3.4--2.2.3.4---1.2.345.3---122--
[clb@localhost sh]$ awk 'BEGIN {FS="-+";i=0;} {for(i=1;i<NF;i++){printf("++t%d\nmenu=t%d\ntitle=%s\nhost=%s\n", i,i,$i,$i);}}' iplist > output
[clb@localhost sh]$ cat output
++t1
menu=t1
title=1.2.3.4
host=1.2.3.4
++t2
menu=t2
title=2.2.3.4
host=2.2.3.4
++t3
menu=t3
title=1.2.345.3
host=1.2.345.3
++t4
menu=t4
title=122
host=122
[clb@localhost sh]$
作者: miracle_wei    时间: 2012-02-24 15:17
#sh test.sh > test.txt

x.JPG (7.25 KB, 下载次数: 17)

x.JPG

作者: c251683535    时间: 2012-02-28 15:18
本帖最后由 c251683535 于 2012-02-28 15:20 编辑

#! /bin/bash
IP="1.2.3."
for i in `seq 10`; do
echo  ++t$i
echo  "menu = t$i"
echo  "title = $IP$i"
echo  "host = $IP$i"
echo
done > ip.txt    #使用输出重定向...在当前目录下会出现个ip.txt文件  里面就是你要的内容
不想输出到文件的话 就把最后面的(>ip.txt)删除掉   这样就直接在屏幕上输出了

1.jpg (26.36 KB, 下载次数: 18)

1.jpg

2.jpg (17.74 KB, 下载次数: 17)

2.jpg

作者: liu850918    时间: 2012-02-28 16:06
回复 1# reborts_linux


    #/bin/bash

y="1.2.3."
i=1
while [ $i -le 10 ]
do
echo "++ t$i"
echo "menu = t$i"
echo "title = $y$i"
echo "host = $y$i"
echo ""
i=`expr $i + 1`
done
作者: reborts_linux    时间: 2012-02-29 19:49
回复 4# justfate


    非常感谢,ip要是没有这么有规律 就没法实现了
作者: 方兆国    时间: 2012-02-29 20:46
  1. #! /bin/bash
  2. ip=1.2.3.

  3. for i in {1..10}
  4. do
  5.         IP=${ip}$i
  6.         echo ++t$i
  7.         echo menu = t$i
  8.         echo title = $IP
  9.         echo host = $IP
  10. done
  11. exit 0
复制代码
回复 1# reborts_linux


    至于如何向文件输入,我就不多说了
作者: chenlinbo5588    时间: 2012-03-01 13:47
回复 10# reborts_linux


    [clb@localhost sh]$ cat iplist2
china  3.4.5.62  
       9.0.11.2
       9.0.11.3
       9.0.11.4
england   67.45.33.1
       67.23.45.22

france  34.43.6.2
                22.34.3.23

[clb@localhost sh]$ cat ip.awk
#!/bin/awk

BEGIN {
title="";
ip="";
cnt = 0;

}

{
if(match($0, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)) {
        ip=substr($0,RSTART,RLENGTH);
        cnt++;
}else{
        next;
}

if($1 ~ /^[a-zA-Z][\s\t]*/){
        area_cnt++;
        cnt=1;
        title=$1;
}

printf("++%s%d\nmenu = %s%d\ntitle = %s\nhost = %s\n\n",title,cnt,title,cnt,ip,ip);

}
[clb@localhost sh]$ awk -f ip.awk iplist2
++china1
menu = china1
title = 3.4.5.62
host = 3.4.5.62

++china2
menu = china2
title = 9.0.11.2
host = 9.0.11.2

++china3
menu = china3
title = 9.0.11.3
host = 9.0.11.3

++china4
menu = china4
title = 9.0.11.4
host = 9.0.11.4

++england1
menu = england1
title = 67.45.33.1
host = 67.45.33.1

++england2
menu = england2
title = 67.23.45.22
host = 67.23.45.22

++france1
menu = france1
title = 34.43.6.2
host = 34.43.6.2

++france2
menu = france2
title = 22.34.3.23
host = 22.34.3.23

[clb@localhost sh]$


如果IP 地址文件 地区英文地址不在一行的最开始的话   

if($1 ~ /^[a-zA-Z][\s\t]*/){ 这个匹配需要改一下 吧 ^ 去掉
作者: reborts_linux    时间: 2012-07-17 22:32
回复 11# chenlinbo5588

高手。。学习了   多谢!!
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2