[bash] case statement werkt niet?

Pagina: 1
Acties:

  • MadMarky
  • Registratie: Augustus 2001
  • Niet online

MadMarky

Begint eer ge bezint

Topicstarter
Ik ben aan het proberen om op basis van het byld pakket een bootfloppy te maken. Alles leuk en aardig, op een gegeven moment moet je een script draaien wat een aantal dingen checkt en een root mapstructuur aanmaakt (BuildRoot). Nu is er 1 ding: het script werkt niet en ik zou niet weten waarom :?
Als ik het script execute rechten geef en "./BuildRoot (insert naam configfile)" aanroep, krijg ik de volgende melding:
bash: ./BuildRoot: /bin/bash
: bad interpreter: Onbekend bestand of map

Hmm, leuk.
Bij "bash BuildRoot (configfile)" wordt het nog spannender:
BuildRoot: line 6:
: command not found
BuildRoot: line 28: syntax error near unexpected token `in
'
BuildRoot: line 28: ` case "$1" in
'

Als ik hier een workaround voor maak (lees: weglaten, 't is maar een input check) werkt het, maar gaat het script bij de volgende case statement op z'n bek. Zet ik dat statement om naar een if-structuur ipv. case dan werkt het wel, maar dan zeurt ie over de volgende, etc.
Anyway, ziet iemand hier iets vreemds in de syntax? Ik kan niets vinden...
code:
1
2
3
4
5
6
7
while [ "$1" != "" ] ; do
    case "$1" in
      *=*) eval "$1" ;;
      *) CONF=$1 ;;
    esac
        shift
done


Ik heb hier het complete script staan, en de environment file die geinclude staat in het script:
buildroot.zip

🖥️ | 🚗


Verwijderd

Werkt hier goed hoor, heb je wel #!/bin/bash erboven gezet om dit ook werkelijk via bash en niet sh te laten eval'en?

Doe trouwens iets aan je stijl, matige parsers gaan hiervan op de bek:
• de "iets)", "commando" en ";;" horen elk op een eigen regel (de eerste ; kan namelijk als afsluiter van het vorige commando worden gelezen en dan heb je dus een enkele ; in plaats van de dubbele als afluister en vervolgt 'ie de volgende ")" statement).
• binnen de "while [ iets ]" hoort eigenlijk een test, en er hoort iets (in de regel vaak een x) voor de "$1" en "" omdat de term leeg kan zijn en dat niet per se valid input is (dus: while [ test x"$1" != x"" ]; ...)

Misschien dat het dan ook met bepaalde oudere bash versies niet correct werkt.

  • MadMarky
  • Registratie: Augustus 2001
  • Niet online

MadMarky

Begint eer ge bezint

Topicstarter
Hmm, punt is dat het hier zowel op Suse 9 (bash 2.05) als Redhat 6.2 (bash 1.14) niet wil executen, zoals ik zei gaat het bij elke case statement mis. 't scriptje is gemaakt in 2000, dus met bash 1.14 zou het juist prima moeten werken.

Over de stijl:
ik zal het eens checken, het is destijds door Erich Roncarolo (maker Byld) geschreven. Kennelijk is ie een beetje slordig geweest ;)


edit:
Heb de script syntax iets opgeschoond en de aparte environment file wordt niet meer gebruikt, de globale variabelen staan nu in het script zelf.
Ik heb nu de aanroep "bash -x BuildRoot (configfile)" gedaan voor meer debugging info:
code:
1
2
3
4
5
6
7
8
9
10
11
+ $'\r'
BuildRoot: line 6: 
: command not found
++ dirname BuildRoot
+ dircomm=.
++ basename BuildRoot
+ comm=BuildRoot
BuildRoot: line 32: syntax error near unexpected token `in
'
BuildRoot: line 32: `   case "$1" in
'


Nogsteeds hetzelfde stuk code dus :|
BuildRoot script

[ Voor 45% gewijzigd door MadMarky op 18-10-2004 15:38 ]

🖥️ | 🚗


  • Broer
  • Registratie: Januari 2002
  • Laatst online: 19-12-2025
Het probleem zit denk ik in de formattering van je File, de eerste foutmeldingen geven zoiets aan:
MadMarky schreef op 18 oktober 2004 @ 14:05:
...
meer debugging info:
code:
1
2
3
4
5
6
7
+ $'\r'
BuildRoot: line 6: 
: command not found
++ dirname BuildRoot
+ dircomm=.
++ basename BuildRoot
...
Wat er lijkt me aan de hand is is dat de file van een Windows systeem afkomstig, waardoor de regeleinden niet goed zijn.

Als je het commando dos2unix op BuildRoot loslaat, en je voert hem nog een keer uit, heb je dan het probleem nog steeds?

Ik heb het hier een stukje nagespeeld: Ik krijg wel de eerste fouten, maar daarna nog meer andere, dus ik ben ook niet helemaal zeker.

  • MadMarky
  • Registratie: Augustus 2001
  • Niet online

MadMarky

Begint eer ge bezint

Topicstarter
Bedankt, dat was inderdaad het probleem _/-\o_
Na een conversie start het script zonder problemen :)

🖥️ | 🚗