Solaris / bash : Funktionsaufruf im if []

tcreinig

Newbie
Registriert
Nov. 2010
Beiträge
2
Hallo,
ich versuche gerade Shellscripte für normale Kollegen lesbar zu machen, und hab da eine kurze Frage:

Ein Script size.sh mit DATEINAME als paremeter liefert mir eine Anzahl an Zeilen zurück.
Kann ich aus den Statements:

#!/bin/bash
LINESIZE=size.sh $FILE
if [ $LINESIZE -gt 24 ]
then
....

auf das Zwischenspeichern von LINESIZE verichten und so etwas wie

#!/bin/bash
if [ (size.sh $OUTFILE) -gt 24 ]
then
....

basteln? Ich komme da zu keiner Fehlerfreien Lösung :(

Danke & Gruß
 
Ist auch vollkommen falsch :D
command substitution funktioniert mit $(size.sh ..) oder alternativ `size.sh ...`
außerdem sind argumente an programmaufrufe IMMER zu quoten. also "$FILE" und nicht $FILE.

bei shellscripts kannste im übrigen davon ausgehen, dass je unleserlicher er ist, desto mehr versteht der programmierer von seinem handwerk ;)
 
Zuletzt bearbeitet:
IceMatrix schrieb:
außerdem sind argumente an programmaufrufe IMMER zu quoten. also "$FILE" und nicht $FILE.

Nein, man muß nicht IMMER alle Argumente eines Programmaufrufs quoten. Ich nehme mal "wc -c" statt size.sh, damit man was sehen kann. Der erste Versuch würde wohl so aussehen:

LINESIZE=`wc -c $FILE`

Nur stellt man schnell fest, dass das nur funktioniert, wenn im Dateinamen (also in $FILE) keine Leerzeichen drin sind. Mit $FILE="Feile mit Loch im Namen" würde wc nach den 5 Files "Feile", "mit", "Loch", "im" und "Namen" suchen statt nach einem File namens "Feile mit Loch im Namen". Deshalb schreibt man besser:

LINESIZE=`wc -c "$FILE"`

Das wars dann aber auch. Es gibt aber keinen Grund, alle Argumente zu quoten, also zu schreiben:

LINESIZE=`wc "-c" "$FILE"`

Das funzt natürlich auch, nur sind die Quotes um -c sinnlos.
 
bei shellscripts kannste im übrigen davon ausgehen, dass je unleserlicher er ist, desto mehr versteht der programmierer von seinem handwerk

Dank Euch Beiden, hat geholfen.
Noch ein Kommentar: Natürlich ist's Ruhm- und Ehrenvoll, wenn keiner Dein Script versteht, aber über kurz oder lang musst Du es selber nochhmals verstehen, und das kann grausam sein.
Ausserdem ist einfaches scripten ein Zeichen aktiver Nächsteliebe :freaky:
 
mensch183 schrieb:
Nein, man muß nicht IMMER alle Argumente eines Programmaufrufs quoten. Ich nehme mal "wc -c" statt size.sh, damit man was sehen kann.

mit alle argumente eines programmaufrufs sind die gemeint, die per variable durchgereicht werden (und damit potentiell field separators drin haben -> IFS). dass man -c nicht quoten muss ist wohl offensichtlich..
 
Zurück
Oben