shellscripts:shellscripts

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
shellscripts:shellscripts [2021/05/03 21:48] – [Dateinamen beschneiden] stshellscripts:shellscripts [2023/01/17 23:45] (aktuell) – [Links] st
Zeile 16: Zeile 16:
 ===== Links ===== ===== Links =====
  
 +  * [[https://devhints.io/bash|Bash scripting cheatsheet]]
   * [[http://mywiki.wooledge.org/BashFAQ/001|How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?]]   * [[http://mywiki.wooledge.org/BashFAQ/001|How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?]]
   * [[http://www.barmasse.org/linux/kommandozeile/sed.html|sed – Mit dem „Streaming Editor“ Text in Dokumenten verändern]]   * [[http://www.barmasse.org/linux/kommandozeile/sed.html|sed – Mit dem „Streaming Editor“ Text in Dokumenten verändern]]
Zeile 181: Zeile 182:
  echo "empty parameter!"  echo "empty parameter!"
  echo "Usage: $0 [Parameter]"  echo "Usage: $0 [Parameter]"
-fi 
-</code> 
- 
-==== Fehler aufgetreten (Exit-Code ungleich 0) ==== 
- 
-<code bash> 
-if [ $? -ne 0 ] 
-then 
-  echo Fehler aufgetreten 
-  exit 1 
-else 
-  Code 
 fi fi
 </code> </code>
Zeile 232: Zeile 221:
  
 [[https://stackoverflow.com/questions/226703/how-do-i-prompt-for-yes-no-cancel-input-in-a-linux-shell-script|How do I prompt for Yes/No/Cancel input in a Linux shell script?]] [[https://stackoverflow.com/questions/226703/how-do-i-prompt-for-yes-no-cancel-input-in-a-linux-shell-script|How do I prompt for Yes/No/Cancel input in a Linux shell script?]]
 +
 +
 +==== interaktive Shell erkennen ====
 +
 +Skripts sollten bei Aufruf über cron nicht unnötig Statusmeldungen erzeugen:
 +<code bash>
 +if [ -z "$PS1" ]; then
 +    echo This shell is not interactive.
 +else
 +    echo This shell is interactive.
 +fi
 +</code>
 +
 ==== Datei erzeugen ==== ==== Datei erzeugen ====
  
Zeile 248: Zeile 250:
  
 ==== Zählschleife (kopfgesteuert) ==== ==== Zählschleife (kopfgesteuert) ====
 +
 +kopfgesteuert: wird nur ausgeführt wenn Bedingung erfüllt.
  
 von 1.. bis 10 zählen: von 1.. bis 10 zählen:
Zeile 254: Zeile 258:
 i=1 i=1
 while [ $i -le 10 ] while [ $i -le 10 ]
 +do
 +  echo $i
 +  let i=$i+1 #nur bash
 +  # i=`expr $i + 1` # universal
 +done
 +</code>
 +oder als for-Schleife:
 +<code bash>
 +for i in {0..10}; do echo $i; done
 +</code>
 +==== Zählschleife (Fussgesteuert) ====
 +
 +Fußgesteuert: wird mindestens einmal ausgeführt und anschließend nur wenn Bedingung erfüllt.
 +
 +von 1.. bis 10 zählen:
 +<code bash>
 +#!/bin/bash
 +i=1
 +until [ $i -gt 10 ]
 do do
   echo $i   echo $i
Zeile 309: Zeile 332:
 </code> </code>
  
-[[https://www.tobstarr.com/2017/03/25/cleaning-up-in-bash-scripts/|Quelle]]+[[https://www.tobstarr.com/2017/03/25/cleaning-up-in-bash-scripts/|Quelle]] siehe auch: [[https://www.innoq.com/de/blog/fehlerbehandlung-in-shellskripten/|Fehlerbehandlung in Shellskripten]]. 
 + 
 +=== Fehler aufgetreten (Exit-Code ungleich 0) === 
 + 
 +<code bash> 
 +if [ $? -ne 0 ] 
 +then 
 +  echo Fehler aufgetreten 
 +  exit 1 
 +else 
 +  Code 
 +fi 
 +</code>
  
  
 ==== Dateinamen beschneiden ==== ==== Dateinamen beschneiden ====
  
-Aus einem Pfad bekommt man mit ''basename'' den Dateinamen heraus. Andere Möglichkeiten+Aus einem Pfad bekommt man mit 
 +  * ''basename'' den Dateinamen und mit 
 +  * ''dirname'' den Verzeichnispfad heraus.
  
-  * nur den **Dateinamen**: <code>echo "$DATEINAME" | cut -d. -f1</code>+Andere Möglichkeiten 
 +  * nur den **Dateinamen** (ohne Erweiterung): <code>echo "$DATEINAME" | cut -d. -f1</code>
   * nur die **Erweiterung**: <code>echo $DATEINAME | awk -F . '{print $NF}'</code>   * nur die **Erweiterung**: <code>echo $DATEINAME | awk -F . '{print $NF}'</code>
   * pro Aufruf **eine Ebene wegnehmen** (bei mehreren Punkten im Dateinamen):   * pro Aufruf **eine Ebene wegnehmen** (bei mehreren Punkten im Dateinamen):
Zeile 332: Zeile 370:
  
 ==== sed-Befehle ==== ==== sed-Befehle ====
 +
 +# Kommentarzeilen entfernen:'' sed /^#/d Dateiname.txt''
 +
 +Leerzeilen: ''sed /^$/d Dateiname.txt''
  
 <file> <file>