Du bist nicht angemeldet.

#1 02.01.2020 11:44:53

J4son
Mitglied

[gelöst] Frage zu bash script mit while schleife

Hi,

sorry falls das jetzt eine dumme frage ist, aber ich komme mit einem bash script nicht weiter. Um es grob zu erklären. Das script wird via

./script.sh blubb blubb3 blubb4 blubb5 blub6 ...

angesteuert. $1 steuert den teil des scripts an der aufgerufen werden soll. $2 gibt den Dateinamen an in den die while Schleife schreiben soll.
$3 bis zum vorletzten Argument soll so geschrieben werden:

echo "\"$3\", " >> $2
echo "\"$4\", " >> $2
echo "\"$5\", " >> $2
....

und der letzte Eintrag dann so:

echo "\"$letztesargument\"" >> $2

Danke im voraus für jegliche Hilfe!

Grüße und ein frohes neues.

Beitrag geändert von J4son (02.01.2020 13:00:37)

Offline

#2 02.01.2020 12:24:45

frostschutz
Mitglied

Re: [gelöst] Frage zu bash script mit while schleife

Kannst du z.B. mit shift machen. shift frisst eins (oder mehr) Argumente und der Rest rückt auf.

#!/bin/bash

if [ $# -lt 3 ]
then
    panic auf der titanic
fi

teil=$1
datei=$2
shift 2 # wirft $1, $2 weg und macht $3, $4, $5, ... zu $1, $2, $3, ...

while [ $# -gt 1 ] # solange es mehr als 1 argument gibt
do
    echo  "\"$1\", " >> "$datei"
    shift # wirft $1 weg und macht $2 zu $1
done

echo "\"$1\"" >> "$datei"

Offline

#3 02.01.2020 12:59:59

J4son
Mitglied

Re: [gelöst] Frage zu bash script mit while schleife

Ach genial! "shift" kannte ich noch nicht. Das ist genau das was ich gesucht habe!

Vielen Dank frostschutz!

Offline

#4 02.01.2020 14:09:51

Foulanzer
Mitglied

Re: [gelöst] Frage zu bash script mit while schleife

Für Faule ohne shift:

for i in $*; do
  echo $i >> $datei
done

$* ist ein Array aus allen Argumenten

EDIT: Interpreter ist die /bin/sh

Beitrag geändert von Foulanzer (02.01.2020 14:14:49)

Offline

#5 02.01.2020 14:17:22

J4son
Mitglied

Re: [gelöst] Frage zu bash script mit while schleife

Foulanzer schrieb:

Für Faule ohne shift:

for i in $*; do
  echo $i >> $datei
done

$* ist ein Array aus allen Argumenten

EDIT: Interpreter ist die /bin/sh

Das kannte ich schon. Aber das wäre nicht die Lösung für mein Problem gewesen da die Schleife mit $3 beginnt und für das letzte Argument etwas anderes machen muss.

Offline

#6 02.01.2020 19:43:42

frostschutz
Mitglied

Re: [gelöst] Frage zu bash script mit while schleife

in bash kannst du es auch mit "${@:3:$#-3}" ausdrücken aber das funktioniert in einer anderen Shell nicht unbedingt...

$ set 1 2 3 4 5 6 7 8 9
$ echo $#
9
$ echo "$@"
1 2 3 4 5 6 7 8 9
$ echo "${@:3:$#-3}"
3 4 5 6 7 8

ansonsten halt das gute alte Erbsenzählen in der for-Schleife

aber ich benutze ganz gerne shift für sowas. Besser noch in einer Subroutine die ihre eigene Argumentkette hat, damit man die des Hauptzweigs nicht verbeutelt...

Beitrag geändert von frostschutz (02.01.2020 19:45:26)

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums