[BASH/Ubuntu] Script leest het bestand niet meer in.

Pagina: 1
Acties:

Onderwerpen


  • GBCHEATER
  • Registratie: Juni 2003
  • Laatst online: 17-09-2024
Dag allemaal,

Ik ben bezig met een script om de configuratie bestanden van BIND te veranderen. Hiervoor moet ik het bestand named.conf.local inlezen. Om het bestand regel voor regel in te lezen, gebruikte ik de while/do constructie. Nu een dag of twee later, lukt dit niet meer.

Om het een en ander te testen, heb ik een nieuw scriptje gemaakt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
FILE="/etc/bind/named.conf.local";

if [ -f "$FILE" ]; then
        echo "file $FILE exists";
else
        echo "File $FILE does not exist";
        exit;
fi

while read LINE ; do
        echo "$LINE";
done < "$FILE";

read -p "Want me to open the file in nano? (y/n) " VAR_INPUT

if [ "$VAR_INPUT" = "y" ]; then
        nano "$FILE";
fi


Jammer genoeg zie ik weer de inhoud van het bestand niet op het scherm staan. Wanneer ik hem vervolgens open met nano, kan dit en zie ik de inhoud van het bestand. Wanneer ik de bestandsnaam verander naar een ander bestand (bijvoorbeeld named.conf.options), dan krijg ik de inhoud wel op het scherm.

Ik heb het script uitgevoerd onder een niet SU gebruiker, en onder root om zeker te zijn dat het geen rechten probleem is.

Ik krijg verder geen foutmeldingen oid, ik krijg gewoon geen uitvoer.

Hebben jullie enig idee wat ik fout doe?

Bedankt voor jullie tijd!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • GBCHEATER
  • Registratie: Juni 2003
  • Laatst online: 17-09-2024

  • cherwin
  • Registratie: Maart 2006
  • Niet online
Op zich ziet jouw script er goed uit, alleen vind ik het raar dat je een while-statement gebruikt om een bestand weer te geven. Daarnaast duiden variabelen die met hoofdletters geschreven zijn aan dat het om een systeem variabele gaat. Verder hoef je niet elke regel af te sluiten met een puntkomma. Ook is het gebruik van "[" verouderd, tegenwoordig word "[[" aangeraden. Zelf zou ik het ongeveer zo doen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
EDITOR="/usr/bin/nano"
file="/etc/bind/named.conf.local"

if [[ ! -f "$file" ]]; then
    echo "File $file does not exist"
    exit 1
fi

cat "$file"

read -p "Want me to open the file in $(basename $EDITOR)? (y/n) " answer

case "$answer" in
    y|Y|yes) "$EDITOR" "$file" ;;
    *) exit 1 ;;
esac


Verder kan je deze script nog uitbreiden om een bestandsnaam als operand te vragen. Hoe dat moet mag je natuurlijk zelf uitzoeken. :)

Tell me your problem, not the solution you think I should build for you.


Verwijderd

GBCHEATER schreef op donderdag 28 augustus 2008 @ 05:43:
Dag allemaal,

Ik ben bezig met een script om de configuratie bestanden van BIND te veranderen. Hiervoor moet ik het bestand named.conf.local inlezen. Om het bestand regel voor regel in te lezen, gebruikte ik de while/do constructie. Nu een dag of twee later, lukt dit niet meer.

Om het een en ander te testen, heb ik een nieuw scriptje gemaakt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
FILE="/etc/bind/named.conf.local";

if [ -f "$FILE" ]; then
        echo "file $FILE exists";
else
        echo "File $FILE does not exist";
        exit;
fi

while read LINE ; do
        echo "$LINE";
done < "$FILE";

read -p "Want me to open the file in nano? (y/n) " VAR_INPUT

if [ "$VAR_INPUT" = "y" ]; then
        nano "$FILE";
fi


Jammer genoeg zie ik weer de inhoud van het bestand niet op het scherm staan. Wanneer ik hem vervolgens open met nano, kan dit en zie ik de inhoud van het bestand. Wanneer ik de bestandsnaam verander naar een ander bestand (bijvoorbeeld named.conf.options), dan krijg ik de inhoud wel op het scherm.

Ik heb het script uitgevoerd onder een niet SU gebruiker, en onder root om zeker te zijn dat het geen rechten probleem is.

Ik krijg verder geen foutmeldingen oid, ik krijg gewoon geen uitvoer.

Hebben jullie enig idee wat ik fout doe?

Bedankt voor jullie tijd!
Je script werkt hier. (ik heb geen idee waarom je geen output krijgt)

  • GBCHEATER
  • Registratie: Juni 2003
  • Laatst online: 17-09-2024
cherwin schreef op donderdag 28 augustus 2008 @ 08:03:
Op zich ziet jouw script er goed uit, alleen vind ik het raar dat je een while-statement gebruikt om een bestand weer te geven. Daarnaast duiden variabelen die met hoofdletters geschreven zijn aan dat het om een systeem variabele gaat. Verder hoef je niet elke regel af te sluiten met een puntkomma. Ook is het gebruik van "[" verouderd, tegenwoordig word "[[" aangeraden. Zelf zou ik het ongeveer zo doen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
EDITOR="/usr/bin/nano"
file="/etc/bind/named.conf.local"

if [[ ! -f "$file" ]]; then
    echo "File $file does not exist"
    exit 1
fi

cat "$file"

read -p "Want me to open the file in $(basename $EDITOR)? (y/n) " answer

case "$answer" in
    y|Y|yes) "$EDITOR" "$file" ;;
    *) exit 1 ;;
esac


Verder kan je deze script nog uitbreiden om een bestandsnaam als operand te vragen. Hoe dat moet mag je natuurlijk zelf uitzoeken. :)
Bedankt voor je reactie, ik heb dit scriptje gemaakt om te testen of het bestand bestaat, in te lezen en de keuze te bieden om hem te openen in bash. Het stuk waar ik hem voor gebruik, krijgt geen user input meer. In het echte script geef ik het bestand ook niet weer, maar voer ik een aantal bewerkingen op de tekst uit :)

Ik heb dit topic op een aantal andere fora ook staan, en daar kwamen ze op het idee om een for loop te gebruiken:

code:
1
2
3
for LINE in $(cat $FILE); do
        echo "$LINE";
done


Dit werkt wel op het bestand. Enig idee waardoor dit kan? Bedankt voor de best practice pointers, de ; komt vooral uit mijn ervaring met programmeertalen weg. De [[ gebruik ik al voor alle regular expressions, misschien ook maar doorvoeren op de rest.

Ik kan nu dus het bestand gewoon weer inlezen, maar hebben jullie enig idee waarom het met een for-loop wel loopt, en met de while loop niet?

Bedankt!

:update:

Het lijkt te komen door de \r als newline ipv de \n. Hij doet het weer :)

Tnx iedereen!
Pagina: 1