Bash: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Links =
* [[Alias und Variablen]]
* [[Kochbuch für die Konsole]]
=Entfernen eines Präfixes=
=Entfernen eines Präfixes=
* Syntax: ${name#muster} oder ${name##muster}
* Syntax: ${name#muster} oder ${name##muster}
Zeile 59: Zeile 64:
<source lang=bash>
<source lang=bash>
function Example(){
function Example(){
        local lines
  local file=/tmp/dummy
        local file=/tmp/dummy
  local line
        mapfile -t <$file lines
  while read line; do
        local count=${#lines[@]}
    echo "$line"
        local ix=0
  done < $file
        while [ $ix -lt $count ]; do
                local line=${lines[$ix]}
                ix=$(expr $ix + 1)
        done
}
}
Example
</source>


</source>
= Text einlesen (read) =
<syntaxhighlight lang="bash">
read answer "= Say something"
echo $answer
</syntaxhighlight>

Aktuelle Version vom 7. Februar 2024, 18:17 Uhr

Links[Bearbeiten]


Entfernen eines Präfixes[Bearbeiten]

  • Syntax: ${name#muster} oder ${name##muster}
  • Wird am Anfang des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
  • Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
  • Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
 X=Datei.01.txt ; echo "#:" ${X#*.} "##:" ${X##*.}
#: 01.txt ##: txt

Entfernen eines Suffixes[Bearbeiten]

  • Syntax: ${name%muster} oder ${name%%muster}
  • Wird am Ende des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
  • Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
  • Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
 X=Datei.01.txt ; echo "%:" ${X%.*} "%%:" ${X%%.*}
%: Datei.01 %%: Datei

Ersetzen eines Teilstrings[Bearbeiten]

  • Syntax: ${name/muster/ersetzung}
  • Wird das Muster im Variablenwert gefunden, wird es einmal ersetzt.
    • Sollen alle Teilstrings ersetzt werden gilt die Syntax:
    • ${name//muster/ersetzung}
  • Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
  • '\' ist ESC-Zeichen: das folgende Zeichen wird nicht als Metazeichen interpretiert
 X=Datei.01.txt ; echo ${X/Datei./artikel_}
 UNIX_PATH=/abc/def ; WIN_PATH=${UNIX_PATH//\//\\} ; echo $WIN_PATH
artikel_01.txt
\abc\def

Suchen eines regulären Ausdrucks[Bearbeiten]

  • Syntax: expr $name : <regex>
  • expr liefert als Ergebnis 0, wenn der Ausdruck gefunden wurde, 1 wenn nicht.
  • Hinweis: der reg. Ausdruck bezieht sich immer auf den Stringanfang, enthält also implizit einen "^".
  • folgende Syntaxelemente habe ich gefunden:
    • beliebig oft: "a*"
    • maximal einmal: "a\?"
    • mindestens einmal: "a\+"
    • Anzahl Vorkommen "a\{1,5\}"
    • Klammerung "\(T:)\?[0-9-]*"
    • Alternativen: "affe\|gnu"
  • Hinweis: expr gibt zusätzlich die Länge des gefundenen Ausdrucks aus, also nach /dev/null umleiten, wenn nicht gewünscht
X="ab2"
if expr $X : "[a-z][a-z0-9]* > /dev/null ; then
  echo "X ist ein Identifier"
fi

Datei zeilenweise abarbeiten[Bearbeiten]

function Example(){
  local file=/tmp/dummy
  local line
  while read line; do
    echo "$line"
  done < $file
}
Example

Text einlesen (read)[Bearbeiten]

read answer "= Say something"
echo $answer