[SHELL] script met standaardinput + argument

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 09-09 20:37
Hoi :),

Ik probeer een shellscriptje te schrijven die zowel gebruik maakt van standaardinput als een argument.

code:
1
2
3
4
5
6
7
if [ -z "$*" ]
then
    echo "Error - test2.sh heeft een argument nodig" >&2
else
    cat  $* |

-etc-


Nu probeer ik hem op de volgende manier te gebruiken:

code:
1
cat files/*.txt | bash file.sh token


En krijg ik de volgende terechte foutmelding:

code:
1
cat: token: No such file or directory


Hoe kan ik toch gebruik maken van zowel standardinput als een argument?

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 11-09 21:28

CAPSLOCK2000

zie teletekst pagina 888

Kun je iets beter toelichten wat je met 'token' wil? Begrijp ik goed dat je de inhoud van de file 'token' wil toevoegen aan de input van stdin?

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

Verwijderd

gebruik getopt

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 14-09 21:52

Hero of Time

Moderator LNX

There is only one Legend

Zoals het er naar uitziet, wil hij bestanden geven aan het script, maar geeft vervolgens ook een parameter oid op. Aangezien die parameter geen bestand is, en cat een bestand verwacht, krijg je die error dat er geen bestand is die zo heet. Doe maar eens op je shell een 'cat token', als het bestand token niet bestaat. Zelfde geval.
Overigens is je voorbeeld niet echt een verschil tussen stdin en argument, je geeft namelijk de inhoud van de bestanden mee als argument. Met stdin verwacht ik een readline optie waar bij je terwijl het script loopt, iets op kan geven, als het script er om vraagt.

Pas als we meer weten wat de bedoeling is van het script kunnen we verder. Wat zijn bijvoorbeeld de vereiste van de parameter?

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Big Mama
  • Registratie: Mei 2000
  • Laatst online: 10:53
vanaf stdin kun je lezen met het 'read' commando vanuit het script. De parameters kun je met '$*' of '$@' gebruiken.

Computers follow your orders, not your intentions.


Acties:
  • 0 Henk 'm!

  • blorf
  • Registratie: December 2003
  • Laatst online: 22-08 16:22
Dat zou kunnen als je die parameter eerst leest en de rest beschouwt als invoer voor het catten.

voorbeeld met optie -a <waarde>
(die optie moet in dit geval verplicht vooraan staan, dus: # file.sh -a <waarde> *.txt)
code:
1
2
3
4
5
6
7
8
9
case $1 in
  "-a")
    shift 
    Optie=$1
    shift
  ;;
esac

cat $@

[ Voor 6% gewijzigd door blorf op 16-10-2011 10:59 ]

You are in a maze of little twisting passages, all different.

Pagina: 1