Forum: PC-Programmierung bash-Frage for-Schleife und Indizes


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rainer U. (r-u)


Bewertung
-1 lesenswert
nicht lesenswert
Liebe alle,

ich habe leider zu viel von bash vergessen.. Ich meine, es gab mal 
etwas, wo man irgendwie elegant in einer Schleife die Aufrufe mitzählen 
konnte.

Beispiel: Ich habe eine Trefferliste von Dateinamen, und will alle 
löschen bis auf den ersten "t" - wir mach ich das elegant?
1
#! /bin/bash
2
Treffer=$(find .)  # nur damit etwas drin steht zum Veranschaulichen
3
4
IFS=$'\n'
5
for t in $Treffer
6
do
7
  echo $t
8
done

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Speziell was für die for-Schleife wäre mir nicht bekannt, aber man kann 
mit bash einfache Arithmetik machen:
1
x=1
2
x=$[x+1] # oder auch let x++
3
echo $x

: Bearbeitet durch User
von Rainer U. (r-u)


Bewertung
-1 lesenswert
nicht lesenswert
Ja ok, das geht.
Vielleicht täusche ich mich auch, aber wir war so, als ob man irgendwie 
an das erste oder letzte Element kommen konnte.. naja so geht's 
jedenfalls

von Alexander S. (alesi)


Bewertung
0 lesenswert
nicht lesenswert
Rainer U. schrieb:
> Beispiel: Ich habe eine Trefferliste von Dateinamen, und will alle
> löschen bis auf den ersten "t" - wir mach ich das elegant?

Ein Möglichkeit wäre die Positionsparameter mit den Dateinamen zu 
belegen:
1
$> touch a
2
$> touch b
3
$> touch c
4
$> set -- *
5
$> echo ${@:2}
6
$> b c

von Alexander S. (alesi)


Bewertung
0 lesenswert
nicht lesenswert
Wenn die Positionsparameter nicht überschrieben werden sollen, geht 
natürlich auch ein array:
1
$> touch a
2
$> touch b
3
$> touch c
4
$> array=($(ls))
5
$> echo ${array[@]:1}
6
$> b c

von LOL (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Arrays sind nett:
1
#!/bin/bash
2
3
OLDIFS=$IFS
4
IFS=$'\n'
5
RESULTS=( $(find /tmp) )
6
IFS=$OLDIFS
7
8
FIRST="${RESULTS[0]}"
9
10
echo "FIRST=$FIRST"
11
echo "all RESULTS=""${RESULTS[@]}"

von rbx (Gast)


Bewertung
0 lesenswert
nicht lesenswert
So grob braucht man wohl so Elemente wie head oder tail, oder/und einen 
Zähler der mitzählt oder/und auch eine Sortierhilfe, dann kann man z.B. 
die kleinste oder die größte Datei behalten/löschen, oder eben die 
letzte, bzw. die neueste oder die älteste.

( https://wiki.ubuntuusers.de/wc/ )

von Rainer U. (r-u)


Bewertung
0 lesenswert
nicht lesenswert
Ja, ich glaube diese Array-Schreibweise war's! Vielen Dank, werde ich 
probieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.