Filtern und zuordnen

satriani

satriani

SysLion
Hallo,

ich muss eine Eingabe filtern und zuordnen zB.:
man gibt ein
# /tmp/script 123.alpha 321.beta beta-blabla test test:alpha falsch
dabei muss folgendes rauskommen
Alpha: 123.alpha, test:alpha
Beta: 321.beta, beta-blabla
Error: test, falsch

ich habe mit for Schleife angefangen

Code:
#!/bin/sh

funktion() {
        for i in $@
        do
           if [ echo $i | grep 'alpha' ]; then
             alpha=$i
           else
             if [ echo $i | grep 'beta' ]; then
               beta=$i
             else
               error=$i
            fi
          fi
        done
}

funktion $@
ALPHA=`echo $alpha | sed 's/ /, /g'`
BETA=`echo $beta | sed 's/ /, /g'`

echo "Alpha: $ALPHA"
echo "Beta: $BETA"
echo $error

Doch damit wird es wohl nichts. Ich versuche gerade mit case, doch das gelingt mir ebenfalls nicht recht.

Ich freue mich auf die Vorschläge und danke im Voraus.
 
Hej,

welche Shell? In der Bash sollte das hier funktionieren:
Code:
#!/bin/bash                                                                                                                                                                                                    

declare -i acounter=0
declare -i bcounter=0
declare -i ecounter=0

for i in $@
do
    if [[ "$i" =~ .*alpha.* ]]; then
        alpha[$acounter]="$i"
        acounter=$((acounter + 1))
    else
        if [[ "$i" =~ .*beta.* ]]; then
            beta[$bcounter]="$i"
            bcounter=$((bcounter + 1))
        else
            error[$ecounter]="$i"
            ecounter=$((ecounter + 1))
        fi
    fi
done

echo alpha: ${alpha[@]}
echo beta: ${beta[@]}
echo error: ${error[@]}

EDIT:
Ich sehe gerade dass deine Signatur FreeBSD und csh sagt. Es ist sicher sinnvoll das trotzdem in relevante posts reinzuschreiben, denn Signaturen koennen sich aendern und haben prinzipiell nichts mit dem Post zu tun, weswegen ich sie automatisch ueberlese.
War die standard-shell in FreeBSD frueher nicht ash? Naja, die bourne shell hat leider keine Arrays, da wirst du dir was anderes ueberlegen muessen. Vielleicht emulieren (http://docstore.mik.ua/orelly/unix/upt/ch45_34.htm)?

Keine Ahnung was sich da in den letzten 20 Jahren getan hat, aber bei csh denke ich immer an das hier: ;)
http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot


MfG,
bytepool
 
Zuletzt bearbeitet:
Hej,
EDIT:
Ich sehe gerade dass deine Signatur FreeBSD und csh sagt. Es ist sicher sinnvoll das trotzdem in relevante posts reinzuschreiben, denn Signaturen koennen sich aendern und haben prinzipiell nichts mit dem Post zu tun, weswegen ich sie automatisch ueberlese.
Erstmal danke vielmals für deine Mühe.
Ich habe extra noch das Teufelchen Smilie genommen um Benutzer aus die Signatur aufmerksam zu machen, anscheinend wirkt es nicht so doll :D

War die standard-shell in FreeBSD frueher nicht ash? Naja, die bourne shell hat leider keine Arrays, da wirst du dir was anderes ueberlegen muessen. Vielleicht emulieren (http://docstore.mik.ua/orelly/unix/upt/ch45_34.htm)?

Keine Ahnung was sich da in den letzten 20 Jahren getan hat, aber bei csh denke ich immer an das hier: ;)
http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot

Danke für den Tipp, ich werd mal versuchen und komme zurück wenn ich deine Hilfe brauche :)
 
Nur weil Deine login-Shell csh ist, fuehrst Du Dein Skript ja nicht mit der csh aus, sondern mit /bin/sh (s. erst Zeile des Skriptes), und es wuerde mich schwer wundern, wenn die in FreeBSD auf die csh verlingt waere - damit wuerde wahrscheinlich das System gar nicht mehr booten, weil sh und csh ueberhaupt nicht kompatibel sind.
 
Danke tgruene,
dann ändere ich die Signatur noch einmal. Damit ist es hoffentlich mit der Shell endgültig abgeschlossen :)
 

Ähnliche Themen

Switche abfragen über Script

Verschlüsseltes Backup-Script mit rsync

Rückgabe eines Befehls

Shell Skript beschleunigen

HandbrakeCLI Shell Skript

Zurück
Oben