Hallo,
Vorweg: Der systemeigene "Bereitschaftsmodus" funktioniert hier nicht! Mein bash-script funktioniert soweit gut, aber mich beschleicht ein Gefühl von Umständlichkeit ☺
Mein Script soll folgende Bedingungen erfüllen:
Nur Zahlen (numerisch)
Kein "-|,|.|"
Keine gemischter input gleichzeitig
Keine Sonderzeichen
Hier mein script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #!/bin/bash # Bereitschaftsmodus: suspend to RAM # Empfehlung Eintrag in visudo: # user ALL = NOPASSWD:[pfad]/bereitschaft # Aufruf: sudo [pfad]/bereitschaft [Sekunden] # Erstellt von Baddabumm, März 2025 # Version 1.02 getestet mit Xubuntu 24.04.2 # Suspend to RAM - Anweisung MEM="echo mem | sudo tee /sys/power/state" # Test auf Vorhandensein von dialog DLG=`type -p dialog` if [ ! -f "$DLG" ]; then echo -e "\n$0: Programm 'dialog' wurde nicht gefunden!\n" read -p "Trotzdem in Bereitschaft gehen? [Eingabe]. Abbruch mit [Strg+C].." eval $MEM && exit 0 fi # Prüft, ob ohne oder mit Startparameter if [ -z "$1" ]; then SEC=30 else SEC=$1 fi # Prüft auf gemischten input oder Zahl negativ if echo "$1" | grep -e '[[:alpha:]]' || (( "$1" < 0 )); then read -t 3 -p "Standardwert 30s wird gesetzt! '$1' Sekunden ungültig: " SEC=30 fi # Hauptdialog für Bereitschaftsmodus dialog --title " Bereitschaftsmodus " \ --backtitle "Aufruf: $0 [n] Sekunden aktuell: $SEC s (Standard: 30s)" \ --pause "\nIn den Bereitschaftsmodus gehen?" 10 36 $SEC # dialog-Rückgabewert von $? # 0 = [OK] button. # 1 = [Abbrechen] button. # 255 = [Esc] + DIALOG_ERROR case $? in 0) eval $MEM;; 1) exit 0;; 255) clear ; read -t 3 -p "Parameter '$1' ungültig: Komma/Punkt/Sonderzeichen nicht erlaubt! Abbruch! ";; esac |
Wie kann ich alle Bedingungen in der Zeile:
1 | if echo "$1" | grep -e '[[:alpha:]]' || (( "$1" < 0 )); .. |
erfüllen und somit die vorletzte Zeile (case $? 255).. als überflüssig streichen? Danke!
Bearbeitet von rklm:
Aufzählung und Codeblock. Bitte beachte Forum/Syntax und nutze die Vorschaufunktion!