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 kompletem 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



Für die Sicherung und Wiederherstellung von SSD / Festplatten-Abbildern gibt es einige Programme.
Linux bietet hier ein sehr einfaches Tool für das Terminal an.
dd (convert and copy a file)

Um etwas Übersicht bei der Auswahl von Quelle und Ziel zu erhalten hilft dieses Script. Download
Das Script bietet 4 Möglichkeit dd zu nutzen:
1. Sicherung einer Festplatte in ein Image. Kann direkt gepackt werden.
2. Wiederherstellung aus einem Image. (Auch direkt aus gepackter Datei)
3. Direkte Kopie eines Datenträger auf einen 2. Datenträger
4. Löschen / überschreiben eines Datenträgers

dd.sh

Je nach Anschluß-Typ und Datenträger dauert es schon etwas. Gepackt wird mit pigz. Es ist ein Kompromiss zwischen Komprimierungsgrad und Geschwindigkeit.
- Das Script kann via Startparameter angepasst werden.
- Dauerhafte Änderungen auch im Script möglich.
- Um Speicherplatz zu sparen müssen nicht alle Partitionen gesichert werden. Es können aber nur Partitionen am Ende ausgelassen werden. Nach der Wiederherstellung muss noch per GParted die Partitionstabelle "von Hand" angepasst werden. (Die nichtgesicherten Partitionseinträge löschen)

Am Ende der Auswahl gibt es noch einmal eine Info über das was durchgeführt wird.

Mögliche Linux Distributionen welche von einem USB-Stick bzw. DVD gestartet werden können.

Distribution

Hinweis

Sprachauswahl 

 Host

User

Passwort
 SSH Zugang:

Secure FTP:
Parted Magic

(Slackware)
~1,7 GB

- Kopie durch Rufus
   * ISO-Image -> MBR
   * ISO-Mode

- Kostenpflichtig
- Läuft im RAM
- Eingestecke Laufwerke
  werden eigenständig erkannt

 Per Programm:
Desktop >
  Keyboard Layout >
   quertz > de
    OK,OK,OK, Yes
 partedmagic

 root

 partedmagic
 An

Ja
Koppix DVD

(Debian)
~4,4 GB

- Kopie durch Rufus
   * ISO-Image -> MBR
   * ISO-Mode

- Eingestecke Laufwerke
  werden eigenständig erkannt

- Knoppix CD geht nicht !

 - Deutsch voreingestellt  microknoppix

 knoppix

 (keins)
 Passwort ändern:
 sudo su
echo "knoppix:knoppix"|chpassword
 Nicht gestartet
sudo su 
/etc/init.d/ssh start
Ubuntu

z.B.
Focal Fossa Desktop-Image

- Kopie durch Rufus
   * ISO-Image -> MBR
   * ISO-Modus

- Eingestecke Laufwerke
  werden eigenständig erkannt

 Sprachauswahl zu Beginn im Desktop
  de eintippen
 Desktop
  (rechte Maustaste) >
   Einstellungen >
    Region und Sprache

  ubuntu


 ubuntu


 (keins)
 Passwort ändern:

sudo su
echo "ubuntu:hallo12!" | chpwd

 nicht installiert


ja, nach Installation

sudo su
apt update

apt install openssh-server -y
systemctl enable ssh
systemctl start ssh
Debian (Live)
xfce.iso ~2,3 GB

 - Kopie durch Rufus
   * ISO-Image -> MBR
   * ISO-Modus

- Eingestecke Laufwerke
  werden eigenständig erkannt

 Sprachauswahl zu Beginn
  Starten mit:
  Debian Live with Localisation Support

Einstellungen >
   I-Bus-Einstellungen >
      Eingabemethode (Register)
Englisch entfernen!
 debian

 user

 live
 Nicht aktiv
sudo su
apt update

apt install gparted -y

apt install openssh-server -y
systemctl enable ssh
systemctl start ssh
GParted Live
(Debian) ~390 MB

 - Kann in RAM geladen werden
  GParted Live (.. to RAM)

- Kein automatisches Mounten
  Per GParted die Partition erfahren
  Mounten per Terminal z.B. Partition sdc1

sudo su
part=sdc1
mkdir /media/$part
mount /dev/$part /media/$part


  mkdir /media/sdc1
  mount /dev/sdc1 /tmp/sdc1 

 

Sprachauswahl zu Beginn
Blue Screen
 Select keymap from arch list >
   quertz > German > Standard > Prog.
 10 (German) > 0 X


Per Terminal

sudo su
dpkg-reconfigure locales
Runterscrollen bis [*] de_DE.UTF-8
markieren mit Leerzeichen
und als Standard festlegen
 debian

 user

 live
Nicht aktiv

Desktop >
 Network config starten
  > eth0 oder wlan auswählen
Per Terminal
rm /etc/hosts.deny
systemctl enable ssh
systemctl start ssh 
Desinfec't

(Ubuntu)

 - Kopie durch Rufus
   * ISO-Image -> MBR
   * ISO-Modus

- Kein pigz (paralleles Packen) daher langsames packen!

- Deutsch voreingestellt   Per Teamviewer
NixOS

z.B. Plasma Desktop
~1,4 GB

 - Kopie durch Rufus
   * ISO-Image -> MBR
   * ISO-Modus
 Settings > Systemsettings
  Input Devices > Keyboard >
   Tab: Layouts
 + Add > ger (German)
Englisch entfernen!

 nixos


nixos


 (keins)
Passwort ändern:

sudo su
echo "nixos:nixos"|chpassword
  Nicht aktiv
sudo su 
nix-env -i openssh
Mint

(Ubuntu)
z.B. Xfce 1,9 GB

 - Kopie durch Rufus
   * ISO-Image -> MBR
   * DD-Modus

 

 Settings > Language Settings >
  Language Support (Install) >
  Add.. > German, Germany > Install
  Language u. Region u.
  Time Format > anpassen

Settings > Keyboard Tab: Layouts
  Use systen defauts > aus
 + Add > ger (German)
Englisch entfernen!

ggf. Relogin

 mint


Live session user


(keins)
System > Users und Groups >
Change name: user
Change password:

 

 

 

LiveStick erzeugen mit Rufus
   * ISO-Image -> MBR
   * ISO-Modus

Passwort ändern:

sudo echo "benutzername|1Passwortxyz§"|chpasswd

 

Die Steuerbefehls-Zeichen für das Einfärben der Komanozeile ist hier kurz erklärt.

Die einzelnen Steuerzeichengruppen können kombiniert werden. Wenn also ein echo Befehl mit den Steuerzeichen aufgerufen wird kann die Ausgabe gesteuert werden.

Anmerkung: Wurde ein "Einfärben" gestarten muss am Ende auch ein "Entfärben" aufgerufen werden.

Folgender Befehl mit den Steuersequenzen fett, blau  und dann wieder normal und default

echo -e "Guten \e[1m\e[34mMorgen\e[0m liebe Sorgen, seit ihr auch schon wieder da?"

würde dies anzeigen:

Guten Morgen liebe Sorgen, seit ihr auch schon wieder da?"

In einem Shell-Script kann das Ganze auch einer Variablen zugewiesen weden. Es macht jedoch eiinen Unterschied ob das Script per sh scriptname.sh oder ./scriptname.sh (Script muss ausführbar sein) aufgerufen wird. Mit einer if-Abfrage kann das abgefangen werden

if [ -z ${BASH_SOURCE} ]; then
blau=`echo "\e[1m\e[34m"`
normal=`echo "\e[0m"`
else
blau=`echo -e "\e[1m\e[34m"`
normal=`echo -en "\e[0m"`
fi
echo "Guten ${blau}Morgen${normal} liebe Sorgen, seit ihr auch schon wieder da?"

Hier die Syntax: \ Backlsash e mit [ eckiger Klammer auf gefolgt von einer 0 Zahl m schließt das Ganze ab.
Es können auch Angaben kombiniert werden z.B \e[4;36;47m

  Steuerzeichen
  Buchstaben-Farbe    Hintergrundfarbe
 Standard  (default)  \e[39m                \e[49m
 schwarz  (black)  \e[30m        \e[40m 
 rot  (red​)  \e[31m        \e[41m
 grün  (green)  \e[32m        \e[42m
 gelb  (orange)  \e[33m        \e[43m
 blau  (blue)  \e[34m        \e[44m
 lila  (purple)  \e[35m        \e[45m
 grün-blau  (aqua)  \e[36m        \e[46m
 grau  (gray)  \e[37m        \e[47m
 
 dunkelgrau  (darkgray)  \e[90m   \e[1;30m    \e[100m
 hellrot  (lightred)  \e[91m   \e[1;31m    \e[101m
 hellgrün  (lightgreen)  \e[92m   \e[1;32m    \e[102m
 hellgelb  (lightyellow)  \e[93m   \e[1;33m    \e[103m
 hellblau  (lightblue)  \e[94m   \e[1;34m    \e[104m
 helllila  (lightpurple)  \e[95m   \e[1;35m    \e[105m
 hell-blau  (lightaqua)  \e[96m   \e[1;36m    \e[106m
 weiß  (white)  \e[97m   \e[1;37m    \e[107m

 

Buchstaben-Stil Steuerzeichen
 normal  (normal)  \e[0m
 heller (fett)  (bold)  \e[1m
 kursiv (gedimmt) (dim) \e[2m oder \e[3m
 unterstrich  (underline)  \e[4m
 Text u Hintergrund
 tauschen die Farbe
(reverse) \e[7m
     
(ohne Wirkung)    
 durchgestrichen  (strickthrough)  \e[9m
 blinken  (blink)  \e[5m oder \e[6m
 versteckt  (hidden)  \e[8m

 

Alle Farbkombinationen als Bash Kommande

for x in {0..8}; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo ""

Farb-Beispiele

bash color

Folgende Schritte im (Linux) Terminal ausführen.

  1. sudo service mysql stop
  2. sudo mysqld_safe --skip-grant-tables
  3. sudo service mysql start
  4. sudo mysql -u root
  5. use mysql;
  6. show tables;
  7. describe user;
  8. update user set authentication_string=password('1111') where user='root';
  9. FLUSH PRIVILEGES;

Das 'neue' Passwort wäre dann -> 11111