Prüfe das erste Argument mit einer if-Abfrage und verknüpfe die beiden Zeichenkettenvergleiche durch ||. bash !/bin/bash if [[ "${1:-}" == "-p" || "${1:-}" ==...
Wie prüft man in Bash, ob die zweite Variable eine 8-stellige Zahl oder eine mit @ beginnende 11-stellige Zeichenfolge ist?
Antwort vomPrüfe das zweite Argument mit einem regulären Ausdruck: entweder genau acht Ziffern oder @ gefolgt von zehn beliebigen Zeichen.
Wenn du mit „zweite Variable“ das zweite übergebene Skriptargument meinst, verwendest du $2:
#!/bin/bash
wert=${2-}
if [[ $wert =~ ^([0-9]{8}|@.{10})$ ]]; then
printf '%s\n' 'Gültig'
else
printf '%s\n' 'Ungültig'
exit 1
fi
Bash unterstützt innerhalb von [[ ... ]] mit =~ reguläre Ausdrücke. Die Anker ^ und $ sorgen dafür, dass der gesamte Wert passen muss. Setze den Ausdruck rechts von =~ nicht vollständig in Anführungszeichen, sonst wird er als wörtlicher Text behandelt.
Die beiden Alternativen bedeuten hier:
[0-9]{8}: genau acht Ziffern, beispielsweise12345678. Führende Nullen sind erlaubt.@.{10}: ein@plus zehn beliebige Zeichen, beispielsweise@abcdefghij. Das sind insgesamt elf Zeichen, einschließlich@.
Falls nach dem @ ausschließlich zehn Ziffern erlaubt sein sollen, verwende stattdessen:
if [[ $wert =~ ^([0-9]{8}|@[0-9]{10})$ ]]; then
printf '%s\n' 'Gültig'
fi
Quellen:
Erstellt mit GPT-6.1 Sol (OpenAI) auf Basis einer aktuellen Websuche.
Verwandte Fragen
Warum löscht rm im Bash-Skript eine Datei mit Leerzeichen trotz Anführungszeichen nicht?
Die Anführungszeichen werden nicht ignoriert: Dein Code übergibt den Dateinamen korrekt als ein einziges Argument an rm. Bash wertet die Anführungszeichen aus und entfernt sie anschlie...