bash script read from file

Pagina: 1
Acties:

  • active2
  • Registratie: Juni 2001
  • Laatst online: 17-07 21:56

active2

Google is your friend

Topicstarter
Ik wil graag een script maken dat de regels van een file uitleest!

dus er staat iets als dit:
1
2
3
4
En dan moet het script regel voor regel even naar het scherm schrijven! (Het script moet een firewall rule aanmaken voor degene die mij portscant) Zie het programma scanlogd voor geinteresseerden!

Nu heb ik al een script gemaakt maar die schrijft alleen de eerste regel naar het scherm en dat 4 keer! Da's dus niet de bedoeling:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

FILE=/root/bin/file
RULES=`wc --lines $FILE | awk '{print $1}'`
i=1

while [ $i -le $RULES ]; do
  read line < $FILE;
  echo $line;
  i=`expr $i + 1`;
done

exit 0

Maar bij dit script leest hij dus alleen de eerste regel en zet die vier keer op het scherm! Wat moet ik veranderen?

Ik heb man bash al gedaan ik heb hier documentatie over bash liggen maar daar staat niet in hoe het moet!

Google, Het mirakel van de 21e eeuw!!!!


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 14:47

Kees

Serveradmin / BOFH / DoC
code:
1
2
3
4
5
6
#!/bin/bash
FILE=/root/bin/file
RULES=`cat $FILE`
for line in $RULES ; do
  echo $line;
done

Zoiets zou moeten werken.

optellen (van $i) kun je beter met $i=$[ $i + 1 ] doen, scheelt weer even :)

Zie ook de abs guide op linuxdoc.org

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Hmm, waarom zo moeilijk doen? : )
gewoon "cat" volstaat toch ook als je een file naar het scherm wil gooien?

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 14:47

Kees

Serveradmin / BOFH / DoC
Op donderdag 14 maart 2002 12:29 schreef blaataaps het volgende:
Hmm, waarom zo moeilijk doen? : )
gewoon "cat" volstaat toch ook als je een file naar het scherm wil gooien?
Ik neem aan dat hij er vervolgens bewerkingen op wil uitvoeren.
cat kan dan genoeg zijn, maar als je het wil optellen zal dat niet genoeg zijn.

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

Op donderdag 14 maart 2002 12:24 schreef Kees het volgende:
code:
1
2
3
4
5
6
#!/bin/bash
FILE=/root/bin/file
RULES=`cat $FILE`
for line in $RULES ; do
  echo $line;
done

Zoiets zou moeten werken.

optellen (van $i) kun je beter met $i=$[ $i + 1 ] doen, scheelt weer even :)

Zie ook de abs guide op linuxdoc.org
Dit gaat alleen bij hele kleine bestandjes goed, want in het for-statement komt de hele expansie van RULES op de command-line, dus meer dan een paar kByte heb je niet.

Waarom niet gewoon :
code:
1
2
3
4
while read line
do
      echo ${line};
done < ${FILE}

In het script van de poster gaat het fout omdat de
code:
1
      read line < $FILE;

binnen de loop steeds opnieuw begint.

The number of things that Arthur couldn't believe he was seeing was fairly large


  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Op donderdag 14 maart 2002 12:59 schreef mvdejong het volgende:

[..]

Waarom niet gewoon :
code:
1
2
3
4
while read line
do
      echo ${line};
done < ${FILE}
Dat is inderdaad de meest simpele en voor de hand liggende constructie, en ook degene die ik het meest gebruik in de Korn shell. Bash schijnt echter een bugje te hebben in de afhandeling van dit statement, wat alleen bij grote bestanden naar voren komt. Het had iets te maken met buffering maar ik weet niet meer precies wat het was, en in welke versie van Bash het was. Ik zal es even nazoeken, en als ik het vind post ik het wel hier.

  • DennisBoom
  • Registratie: Mei 2000
  • Laatst online: 11-08 11:59
head -n $i $file | tail -n 1

als body van de loop werkt ook.

Geen beurs, geen tempo


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Op donderdag 14 maart 2002 14:10 schreef DennisBoom het volgende:
head -n $i $file | tail -n 1

als body van de loop werkt ook.
Dat is erg omslachtig. Per iteratie worden er dan twee processen gestart, het bestand wordt steeds geopend en gesloten. Niet goed voor de performance :)


[edit]active2, zijn al die uitroeptekens in al je posts echt nodig?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.

Pagina: 1