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
Letzte ÜberarbeitungBeide Seiten der Revision
shellscripts:shellscripts [2021/05/03 21:48] – [Dateinamen beschneiden] stshellscripts:shellscripts [2022/12/20 11:25] – [Zählschleife (kopfgesteuert)] st
Zeile 181: Zeile 181:
  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 220:
  
 [[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 249:
  
 ==== 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 257:
 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 331:
 </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 369:
  
 ==== sed-Befehle ==== ==== sed-Befehle ====
 +
 +# Kommentarzeilen entfernen:'' sed /^#/d Dateiname.txt''
 +
 +Leerzeilen: ''sed /^$/d Dateiname.txt''
  
 <file> <file>