String

Anzahl Zeichen    Ergebnis    VBA
string="Ein Text"        
echo ${#string}   8   len(str)
         
Zeichen ersetzen     Ergebnis    VBA Anmerkung
string="Guten Morgen zusammen"
string1="Morgen"
         
string2="Abend"          
echo "${string/$string1/$string2}"    Guten Abend zusammen   replalce()  Wird nur einmal ersetzt
Zeichen mehrfach ersetzen           
string="Guten Morgen wenn nicht gar toller Morgen zusammen"
string1="Morgen"
string2="Abend"
echo "${string//$string1/$string2}"
         
 string='Der Geheimcode ist 12345'
 echo "${string//[0-9]/X}"
   Der Geheimcode ist XXXXX      

 

Teil einer Zeichenkette   Ergebnis       VBA
string="1234567890"            

${string:Start:Länge}

      Start beginnt mit 0. Angabe nicht notwendig    
echo ${string::3}   123   Die ersten 3 Zeichen   left(str,3)
echo ${string:2}   34567890   ab dem 3. Zeichen    
echo ${string:2:1}   3   ab dem 3. Zeichen: nur 1 Zeichen   mid(str,3,1)
${string:Start: -Länge}       Abzüglich x Zeichen von rechts    
echo ${string:0: -3}   1234567        
echo ${string:1: -3}   234567        
${string:: -4]}
${string:$[${#string}-4]}
  7890   letzten 4 Zeichen   right(str,4)
             
string="c:/Order eins/gesuchter Name.txt"          
             
echo ${string%/*}    c:/Order eins   Pfad aus Datei-Namen (kompletter Pfad)    
             
path=${string%/*}       Dateinamen aus kompletten Pfad auslesen    
filename=${string##*/}
           
echo $filename   gesuchter Name.txt        
             
string="   ja am Anfang und Ende sind Leerzeichen  "          
echo $(echo $string|xargs)   ja am Anfang und Ende sind Leerzeichen   Leerzeichen am Anfang und Ende abschneiden   trim(str)
             
Zeichenposition            
string="Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein." such="."
teilstring1=${string%%$such*}
teilstring2=${string%$such*}
   

name@www
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
       
echo $[${#teilstring1}+1]    
echo $[${#teilstring2}+1]
  9
13
       InStr()
             
Enthält Zeichenkette            
string="Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein."            
such="@"            
if [ -z "${string##*$such*}" ]; then
  echo "Suchstring '$such' ist enthalten."
fi        
           
             

 

Umwandeln in Kleinbuchstaben    Ergebnis        VBA
string="EIN PAAR WORTE"            
echo "${string,,}"   ein paar worte       LCase(str)
echo "${string,}"   eIN PAAR WORTE   1. Buchstabe klein    
echo "${string,,[AEIUO]}"   eiN PaaR WoRTe        

declare -l string
string=$string; echo "$string"

   ein paar worte   Bestimme Buchstaben    
Umwandeln in Großbuchstaben            
string="ein paar worte"            
echo "${string^}"   Ein paar worte        
echo "${string^^}"   EIN PAAR WORTE        

echo "${string^^[aeiou]}"

   EIn pAAr wOrtE   Goßschreiben per RegEx   UCase(str)
string="Ein paar Worte"
echo "${string~~}"
  EIN PAAR WORTE   Alle Buchstaben groß    
echo "${string~}"   Ein paar worte   1. Buchstabe groß    

 

Pfad und Dateinamen aus komplettem Datei-Pfad auslesen

    Ergebnis als echo     Ergebnis als echo  
string="c:/tmp xc/gesuchter Name.txt            
Pfad            
pfad=${string%/*}   c:/tmp xc pfad=${string%/*}      
Position des letzen "/" Slashes     Position des letzen "/" Slashes +1    
pos=${#pfad}   9 pos2=$[${#pfad}+1]   10  
Dateiname     Dateiname      
dateiname=${string:$[$pos+1]}   gesuchter Name.txt dateiname=${string:$pos2}   gesuchter Name.txt  
Dateiname ohne Posistion (2 Schritte)            
dateiname=${string:$[${#pfad}+1]}   gesuchter Name.txt        

 

 

Bytes umwandeln damit es verständlich für Menschen ist

     Ergebnis    
int=139356160        

echo $int|numfmt --to=iec
numfmt --to=iec $int

  133M     
         
echo "133M"|numfmt --from=iec
numfmt --from=iec "133M"
   139356160    

 

 

Array

arr=() Leeres Array erzeugen
arr=(1 2 3)
arr=(a "a b" c)
Array erstellen
${arr[2]} 3. Element auswählen
${arr[@]} Alle Elemente erhalten
${!arr[@]} Array-Indizes erhalten
${#arr[@]} Array Größe
arr[0]=3 1. Element überschreiben
arr+=(4)
arr+=( "newElement1" "newElement2" )
Wert anhängen
str=$(ls) ls Ausgabe output als String
arr=( $(ls /dir) ) ls  Ausgabe als array von Dateien
${arr[@]:s:n} Anzahl n Elemente. Startet ab Index s

 Alle Elemente eines Array ausgeben
for t in ${array[@]}; do
   echo $t 

done

 

Alle Elemente eines Array über den Index
for i in ${!array[@]}; do
  echo ${array[$i]}

done

 
Array to String
sting="${array[*]// /}"     sting="$(echo ${array[*]})"
 
Element aus Array löschen        
array=(eins zwei drei)        
echo ${#array[@]}   3    
Element zwei löschen        
unset 'array[1]'        
echo ${array[@]}   ein drei    
echo ${#array[@]}   2    
         

Mehrdimensionale ArraysAssoziative Arrays
In der Bash gibt es eigentlich keine mehrdimensionale Arrays. Durch ein assoziatives Array (Namen) lässt es sich doch realisieren.
Besteht der Namen aus zwei Zahlen und einem Trennzeichen kann das Array-Element darüber angesprochen werden.

         
declare -A arr   Deklarieren des Arays      
arr[0,0] ="erster_Wert"        
arr[0,1] ="zweiter_Wert"         
i=0        
j=1        
echo $arr[$i,$j] zweiter_Wert      

Überprüfen

Ist Variable eine Zahl ? (Integer)        
case ${var#[-+]} in
   *[!0-9]* | '') echo "Keine Zahl";;
  * ) echo "Zahl (Integer)";;
esac
  Fall-Variante    
if [ -z "${var//[0-9]}" ]; then
echo "Zahl (Integer)"
else
echo "Keine Zahl"
fi
   Wenn-Dann Variante    
 
 
Rechnen mit Ganzahlen (integer)     
Addition Subtraktion Muktipikation Division  
i=0        
i=$[$i+1]
let i=${i}+1
i=$[$i-1]
let i=${i}-1
i=$[$i*1]
let i=${i}*1 
i=$[$i/1]
let i=${i}/1 
 
         

 

Logische Ausdrücke

 Zahlen (Integer)      
x=1
y=2
     
[ $x -gt $y ]   größer  
[ $x -ge $y ]   größer gleich  
[ $x -eq $y ]    gleich  
[ $x -ne $y ]   ungleich  
[ $x -lt $y ]   kleiner  
[ $x -le $y ]    kleiner gleich  
a=hallo      
[ $x -le $y -o  $a = "hallo"  ]
[ $x -le $y ] || { $a = "hallo" ]
  oder  
[ $x -le $y -a  $a = "hallo"  ]
[ $x -le $y ] && [ $a = "hallo" ]
  und  

 

Zeichenkette       
[ "$x" = "$y "]   gleich  
[ "$x" != "$y" ]   ungleich  
[ -z "$x" ]   ist leer  
[ -n "$x" ]   ist nicht leer  

 

Funktionen

Überprüfen ob die korrekte Anzahl an Parametern über geben wurde
# 2 Parameter erforderlich
function test () {
  if [ $# -ne 2 ]; then
    echo "Hier sind mindestens 2 Argumente erforderlich"
    echo "usage: $0 arg1 arg2 ... [arg_n]"
    exit
  else
    echo "Erforderliche Anzahl Argumente erhalten"
  fi
}

übergebene Parameter an Funktion
function test2 () {
  echo $1
  echo $2               
}

test2 "hallo" 7

Rüchgabe aus einer Funktion
Zahlen
function zahl_zurueck () {
    return 1
}

Zeichen
function zeichenkette_zurueck () {
    echo "hallo"
}

Ausgabe auf Terminal
zahl_zurueck
Ausgabe in eine Variable
info=$(zeichenkette_zurueck)

Rechnen

Ergebnis ist immer eine Ganzzahl (Integer). Es gelten die mathematischen Grundregeln (Klammer vor Punkt vor Strich).

              Ergebnis
x=100              
Addition   y=$[$x+10]  y=$(($x+10))   echo $y   110
Subtraktion   z=$[$x-110]  z=$(($x-110))   echo $z   -10
Mutiplikation   a=$[$x*-11]  z=$(($x*-11))   echo $a   -1100
Division   b=$[10/9] b=$((10/9))   echo $b   1 (Vorkommazahl)
 Mod   b=$[10/8]
c=$[10/10]
c=$((10/8))
c=$((10/10))
  echo $b
echo $c
  2 (Rest. 8 geht in 10 ein mal. Bleibt 2 übrig)
0

 

Funktionen

Ascii Zahlen aus Zeichenkette auslesen

read -p "Enter a string of characters: " input_string
echo "ASCII values of characters in the input string:"
for ((i = 0; i < ${#input_string}; i++)); do
  character="${input_string:i:1}"
  ascii_value=$(printf "%d" "'$character")
  echo "$character: $ascii_value"
done