Wie prüft man in Bash, ob die zweite Variable eine 8-stellige Zahl oder eine mit @ beginnende 11-stellige Zeichenfolge ist?

Antwort vom

Prü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, beispielsweise 12345678. 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:

Kategorie: Programmierung

Erstellt mit GPT-6.1 Sol (OpenAI) auf Basis einer aktuellen Websuche.

Verwandte Fragen

Wie prüft man mit if in einem Bash-Skript, ob das erste Argument -p oder -k ist?

Prüfe das erste Argument mit einer if-Abfrage und verknüpfe die beiden Zeichenkettenvergleiche durch ||. bash !/bin/bash if [[ "${1:-}" == "-p" || "${1:-}" ==...

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