[Linux] Script op dreambox - syntax error

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Simon VDS
  • Registratie: Mei 2005
  • Laatst online: 11-09 16:06
Hallo,

Ik probeer een script te draaien op mijn Dreambox 800HD dat automatisch een mailtje zo moeten sturen als mijn harde schijf 90% vol is maar krijg volgende melding:

root@sardonis:/etc# diskAlert2.sh: line 10: syntax error: unexpected "done" (expecting "then")

code:
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
df -H | grep -vE '^Filesystem|tmpfs|cdrom|none|root' | awk '{ print $5 " " $1 }' | while read output;
do
  echo $output
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 }' )
  if [ $usep -ge 90 ]; then
    send-mail -s "WARNING! Disk space of DM800 has reached $usep%!" -f censored@gmail.com -b /etc/mail.txt -S relay.dommel.be -P 25 censored@gmail.com
  fi
done



Ik zie niet direct waar ik iets verkeerd doe? :(

[ Voor 3% gewijzigd door Simon VDS op 07-02-2011 12:37 ]


Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Gokje: DOS newlines.

PS: Gebruik [code] of [cmd], dat is een stuk leesbaarder.

Acties:
  • 0 Henk 'm!

  • Simon VDS
  • Registratie: Mei 2005
  • Laatst online: 11-09 16:06
DOS newlines zegt me niks.. :)

Wat is dat voor een beest?

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 04-10 10:42
Sardonis schreef op maandag 07 februari 2011 @ 12:37:
DOS newlines zegt me niks.. :)

Wat is dat voor een beest?
Zie ook: Wikipedia: Newline

Acties:
  • 0 Henk 'm!

  • Simon VDS
  • Registratie: Mei 2005
  • Laatst online: 11-09 16:06
Mja ik kan ook wel googelen maar ik snap niet goed waarom de shell niet met deze code overweg kan..
Op ubuntu draait dit perfect maar op busybox niet

Formatting lijkt me toch juist?

[ Voor 15% gewijzigd door Simon VDS op 07-02-2011 12:49 ]


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-09 20:15

igmar

ISO20022

Omdat busybox geen (volledige) shell is waarschijnlijk

Acties:
  • 0 Henk 'm!

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

Kees

Serveradmin / BOFH / DoC
probeer sowieso eens het met '/bin/bash' ipv /bin/sh' want veel distro's gebruiken tegenwoordig dash, wat een verschikkelijke shell is als standaard 'sh'.

Verder, controleer op juiste lineendings, met bv 'file'; maar ook mcedit zie je ze wel.

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


Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Het aardige van geen bash als /bin/sh gebruiken is dat scripts die bash-extensies gebruiken niet langer werken met /bin/sh als interpreter, waardoor men niet langer per ongeluk bash-scripts kan shippen als sh-scripts. (iets wat helaas in veel Linux-software gebeurt, en slecht voor de portabiliteit daarvan is)

Ik kan me overigens niet voorstellen dat busybox en dash deze code niet begrijpen, ik zie zo niets wat geen standaard sh is.
Sardonis schreef op maandag 07 februari 2011 @ 12:48:
Mja ik kan ook wel googelen maar ik snap niet goed waarom de shell niet met deze code overweg kan..
Met wat voor editor heb je het script gemaakt, en hoe heb je het daarna op dat apparaat gezet? (als het geen lokale editor was)

[ Voor 28% gewijzigd door Onno op 07-02-2011 13:36 ]


Acties:
  • 0 Henk 'm!

  • Simon VDS
  • Registratie: Mei 2005
  • Laatst online: 11-09 16:06
Het is een zwaar gestripte versie speciaal gemaakt voor Dreambox satelliet ontvangers.

Nu schedule ik veel opnames en af en toe loopt de disk eens vol als ik vergeet te kijken :)


Eens kijken of dat ding snmp ondersteunt :)

Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 03-10 18:29

deadinspace

The what goes where now?

Sardonis schreef op maandag 07 februari 2011 @ 12:20:
root@sardonis:/etc# diskAlert2.sh: line 10: syntax error: unexpected "done" (expecting "then")
Probeer het eens met die "then" op een nieuwe regel (vervang de voorgaande puntkomma door een newline). Ik kan me voorstellen dat busybox wat shortcuts maakt bij het parsen waardoor hij struikelt over sommige dingen die toch correct zijn.

Als dat niet helpt, probeer dan het script eens zoveel mogelijk te vereenvoudigen. Zet de "do" ook op een nieuwe regel, vervang die send-mail regel door "echo hoi", etc. Net zo lang tot je hebt gevonden wat het verschil maakt.
Hmm, al de hele file DOS newlines heeft, dan krijg je toch een ander probleem (namelijk dat hij de interpreter niet kan vinden). Maar wie weet verderop in de file inderdaad.
Kees schreef op maandag 07 februari 2011 @ 13:27:
probeer sowieso eens het met '/bin/bash' ipv /bin/sh' want veel distro's gebruiken tegenwoordig dash, wat een verschikkelijke shell is als standaard 'sh'.
Wat is er verschrikkelijk aan dash? Het is een prima posix sh implementatie.

Als je bashisms in je scripts wil gebruiken, dan stel je ook maar bash als interpreter in ;)

Acties:
  • 0 Henk 'm!

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

Kees

Serveradmin / BOFH / DoC
deadinspace schreef op maandag 07 februari 2011 @ 14:13:
[...]

Als je bashisms in je scripts wil gebruiken, dan stel je ook maar bash als interpreter in ;)
Dat doe ik nu ook, maarja, teveel (oude) scripts gingen uit van bash als default shell, en dat heeft mij wel eens gebeten. Sindsdien maak ik geen assumpties meer over welke shell de host zal draaien, /bin/bash staat er boven.

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

Pagina: 1