简体   繁体   中英

Write to a file from a shell script

I have a file myfile which has some text like this:

self.Server('10.0.0.1', '00:00:00:00:00:01', 1)
self.Server('10.0.0.2', '00:00:00:00:00:01', 2)

I have written a shell script to write into myfile . The script has some variables defined:

hosts=100
servers=20
......

I want to modify the line self.Server('10.0.0.x', '00:00:00:00:00:0x', x) in myfile and write it as many times as the value of the variable servers , where x ranges from 1 to value of servers(20 in this case).

Note: myfile might already have some of the entries. For example if previous value of servers was 4 and new value is 6, only two entries need to be added. Also, if the previous value was 6 and the new value is 3, first 3 entries need to be removed.

Can someone please guide how can I achieve it?

Thanks.

#!/bin/bash
servers=20
for ((i=1; i<=servers; i++));; do
    printf "%s%02d%s\n" "self.Server('10.0.0.$i', '00:00:00:00:00:" "$i" "', $i)" >> myfile
done

Run result:

self.Server('10.0.0.1', '00:00:00:00:00:01', 1)
self.Server('10.0.0.2', '00:00:00:00:00:02', 2)
self.Server('10.0.0.3', '00:00:00:00:00:03', 3)
self.Server('10.0.0.4', '00:00:00:00:00:04', 4)
self.Server('10.0.0.5', '00:00:00:00:00:05', 5)
self.Server('10.0.0.6', '00:00:00:00:00:06', 6)
self.Server('10.0.0.7', '00:00:00:00:00:07', 7)
self.Server('10.0.0.8', '00:00:00:00:00:08', 8)
self.Server('10.0.0.9', '00:00:00:00:00:09', 9)
self.Server('10.0.0.10', '00:00:00:00:00:10', 10)
self.Server('10.0.0.11', '00:00:00:00:00:11', 11)
self.Server('10.0.0.12', '00:00:00:00:00:12', 12)
self.Server('10.0.0.13', '00:00:00:00:00:13', 13)
self.Server('10.0.0.14', '00:00:00:00:00:14', 14)
self.Server('10.0.0.15', '00:00:00:00:00:15', 15)
self.Server('10.0.0.16', '00:00:00:00:00:16', 16)
self.Server('10.0.0.17', '00:00:00:00:00:17', 17)
self.Server('10.0.0.18', '00:00:00:00:00:18', 18)
self.Server('10.0.0.19', '00:00:00:00:00:19', 19)
self.Server('10.0.0.20', '00:00:00:00:00:20', 20)

The script would look like:

#!/bin/bash

hosts=100
servers=20

for ((x = 1; x < $servers + 1; x++))
do
    temp=`printf "%02d" $x`
    echo "self.Server('10.0.0.$x', '00:00:00:00:00:$temp', $x)" >> myfile
done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM