loop

Multi Command Readline

Written by  on März 31, 2018

Das kann nerven: Man will eine Liste mit DNS Einträgen überprüfen. Was aber wenn es gar keinen Eintrag gibt? Meist ist es nicht akzeptabel, wenn die Zeile dann einfach weggelassen wird. Also muss man aus dem üblichen Einzeiler eine ganze Schleife basteln, die auch dann eine Ausgabe liefert, wenn dig keine mehr Produziert.

while read LINE
do {
  echo -n "$LINE "
  dig SOA $LINE +short
  }
done < $INPUTFILE

bash select

Written by  on Februar 21, 2017

Die Bash enthält eine Funktion mit der sich ein einfaches Menü darstellen lässt.

#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice 3"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

http://askubuntu.com/questions/1705/how-can-i-create-a-select-menu-in-a-shell-script

Das hat aber ganz schön Nachteile. Alle Beispiele werden in einer Schleife abgewickelt, das brauche ich aber nicht, wenn ich nur einen Durchlauf haben möchte. Ausserdem muss ein Wert 3 Mal angegeben werden. Einmal in der Auflistung, einmal im Case zweig, und noch Einmal wenn ich mit dem Wert tatsächlich etwas anfangen will, wenn er gewählt wurde. Was also tun, um eine einfache Auswahl zu erzeugen, die sich auch einfach erweitern lässt?

Wir verwenden dazu ein Array:

# Warning ARRAY[0] is empty for boundary checking!!!
ARRAY[1]="aa"
ARRAY[2]="ab"

# Display array to screen
for (( i = 1; $i <= ${#ARRAY[@]}; i++ ))
do
  echo "Press $i for ${ARRAY[$i]}"
done

#Read input until we have a valid input
until [[ $input -gt 0 ]] && [[ $input -le ${#ARRAY[@]} ]]; do
  echo "Wert zwischen 1 und ${#ARRAY[@]} waehlen"
  read input
done

# Do what you like with your selection
X=${ARRAY[$input]}

Braucht man mehr Werte im Script, kann man das Array beliebig erweitern. Das könnte man in ein anderes File auslagern. Oder noch was einbauen, dass man eine Taste drücken muss nachdem eine Bildschirmseite ausgegeben wurde.

Empty Array in Powershell

Written by  on September 30, 2016

Ein leeres Array braucht man z.B. damit eine Schleife die auf das Array zugreift gar nicht erst durchläuft.

Initialisiert wird es mit

$array = @()

Ein Array allgemein definieren

$array="wert1","wert2","wert3"

Die Schleife dazu sieht so aus

foreach ($element in $array)
{
  print ("$element");
}

Zählschleife in der Bash

Written by  on September 21, 2014

Ein einfaches Beispiel, wie zählen in der Bash funktioniert.

Der For-Schleife werden die Werte für Start, End und Schrittweite übergeben.

for i in {0..100..1}
do
  command $i
done

Dazu noch ein praktisches Beispiel:

> for i in {0..5..1}
> do
> echo $i
> done
0
1
2
3
4
5