Du bist nicht angemeldet.

Eine Antwort schreiben

Schreibe deinen Beitrag und versende ihn
Beitragsoptionen
Deine Antwort

Zurück

Themen-Übersicht (Neuester Beitrag zuerst)

frostschutz
02.01.2020 19:43:42

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...

J4son
02.01.2020 14:17:22
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.

Foulanzer
02.01.2020 14:09:51

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

J4son
02.01.2020 12:59:59

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

Vielen Dank frostschutz!

frostschutz
02.01.2020 12:24:45

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"
J4son
02.01.2020 11:44:53

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.

Fußzeile des Forums

Powered by FluxBB