[Linux FC5] Shell scripts werken niet

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 04-02 14:53
Ik heb pas Fedora Core 5 geïnstalleerd, maar ondervind iets vrij vreemds bij het uitvoeren van scripts, bvb eentje om met iptables een router te maken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "ok"
iptables -F
echo "ok"
iptables -t nat -F
iptables --delete-chain
iptables --table nat --delete-chain
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0
iptables -A FORWARD -i eth0 -o eth1
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ethX -j MASQUERADE

Ik krijg dan een fout in dit geval:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
./firewall: line 1: /proc/sys/net/ipv4/ip_forward
: No such file or directory
ok
iptables: No chain/target/match by that name
ok
iptables: No chain/target/match by that name
iptables v1.3.5: Unknown arg `--delete-chain
'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: Unknown arg `--delete-chain
'
Try `iptables -h' or 'iptables --help' for more information.
iptables: Bad policy name
iptables: Bad policy name
iptables: Bad policy name
iptables v1.3.5: Invalid target name `DROP
'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: Invalid target name `DROP
'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: Invalid target name `DROP
'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: Invalid target name `ACCEPT
'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: Invalid target name `ACCEPT
'
Try `iptables -h' or 'iptables --help' for more information.
Warning: wierd character in interface `eth0
' (No aliases, :, ! or *).
Warning: wierd character in interface `eth1
' (No aliases, :, ! or *).
iptables v1.3.5: Invalid target name `ACCEPT
'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: Invalid target name `ACCEPT
'
Try `iptables -h' or 'iptables --help' for more information.


Wanneer ik zelf regel per regel uitvoer is er geen enkel probleem.

Ook bij andere scripts gebeuren er vreemde dingen. Als ik bvb een map maak met "mkdir testmap" en ik kijk of die gemaakt is met dir, blijkt er iets als "testmap\r"

Iemand een idee wat er mis is?

alvast bedankt

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 03-02 16:28

zomertje

Barisax knorretje

Het is gebruikelijk om #!/bin/bash aan het begin van een script te zetten, misschien is dat het probleem.
Voert root de scripts uit? Cron?

Check ook het pad: /proc/sys/net/ipv4/ip_forward
Daar geeft hij al een melding op.

Wat dat andere script betreft, geef daar ook eens de source van (of een stukje als deze lang is)

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 04-02 14:53
Wanneer ik #!/bin/bash vooraan het script zet, krijg ik daar zelfs een foutmelding op:
code:
1
2
> ./firewall
bash: ./firewall: /bin/bash^M: bad interpreter: No such file or directory

Script wordt uitgevoerd als root. Het vreemde is dus steeds dat regel per regel intypen werkt, en het script runnen niet.

Een voorbeeld van een script waar het al verkeerd gaat (en manueel lukt dus wel)
code:
1
2
3
mkdir map5
touch bestand4
dir

Ik krijg dan dit als output, je ziet dat er iets verkeerds is gelopen met het maken van die dir's
code:
1
2
3
4
> ./testscript
anaconda-ks.cfg  bla\r      install.log     map1\r  nog_een_bestand\r
bestand1\r   een_bestand\r  install.log.syslog  map2\r  testscript
bestand4\r   firewall   lala\r          map5\r

Verwijderd

Wat je daar zegt ivm testmap\r, dat lijkt me een probleem ivm CR+LR?
De verschillende manier waarop Windows en Unix een newline afhandelen...
Heb je die scriptjes toevallig in kladblok gemaakt ofzo? :p

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 04-02 14:53
Ik maak ze in TextPad, onder Windows.

Ik dacht ook dat er iets mis was met de regels, maar er staat wel degelijk een enter na iedere regel.

Verwijderd

Tom_G schreef op woensdag 16 augustus 2006 @ 17:59:
Ik maak ze in TextPad, onder Windows.

Ik dacht ook dat er iets mis was met de regels, maar er staat wel degelijk een enter na iedere regel.
Euh ja maar dat is het probleem nu net, Windows gaat heel anders om met nieuwregels dan Linux/Unix...
Dat is de reden dat alles mis loopt.

  • OMP
  • Registratie: Augustus 2002
  • Laatst online: 01-12-2025

OMP

Linux enters zijn anders dan Windows enters.
Jaren geleden had ik hier ook vaak mee te maken, wat bij mij werkte was de bestanden openen in een linux texteditor en weer opnieuw wegschrijven, eventueel na het weghalen van de ^M achter de regels.

Er zijn ook programmatjes te vinden die dit doen. Hoop dat dit helpt.

Verwijderd

Of je doet het gewoon ff met perl:

code:
1
perl -pi -e 's/\r\n/\n/g' script.sh

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 04-02 14:53
Ik heb in TextPad een optie gevonden om op te slaan in Unix formaat, en dit blijkt te werken.

In elk geval bedankt voor de hulp, ik kon nog lang zitten zoeken naar de oorzaak. :)

  • daft_dutch
  • Registratie: December 2003
  • Laatst online: 02-12-2025

daft_dutch

>.< >.< >.< >.<

Verwijderd schreef op woensdag 16 augustus 2006 @ 18:10:
Of je doet het gewoon ff met perl:

code:
1
perl -pi -e 's/\r\n/\n/g' script.sh
of dos2unix script.sh

>.< >.< >.< >.<

Pagina: 1