ich habe das folgende Stück Bashskript:
function get_cms {
echo "input cms name"
read cms
cms=${cms,,}
if [ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]; then
get_cms
fi
}
Aber egal was ich eingebe (richtige und falsche Werte), es ruft die Funktion nie wieder auf, weil ich nur 1 dieser 3 Eingaben zulassen möchte. Ich habe es mit || versucht mit [ var != value ] or [ var != value1 ] or [ var != value1 ]
aber nichts funktioniert. Kann mich jemand in die richtige Richtung weisen?
Anstatt zu sagen:
if [ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]; then
sagen:
if [[ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]]; then
Möglicherweise möchten Sie auch auf Bedingte Konstrukte verweisen.
Wenn hauptsächlich geprüft werden soll, ob der angegebene Wert nicht in einer Liste enthalten ist, können Sie möglicherweise den in BASH integrierten erweiterten regulären Ausdrucksvergleich über den Operator "equal tilde" verwenden (siehe auch diese Antwort ). :
if ! [[ "$cms" =~ ^(wordpress|meganto|typo3)$ ]]; then get_cms ; fi
Einen schönen Tag noch
Vielleicht solltest du besser ein case
für solche Listen verwenden:
case "$cms" in
wordpress|meganto|typo3)
do_your_else_case
;;
*)
do_your_then_case
;;
esac
Ich denke für lange solche Listen ist dies besser lesbar.
Wenn Sie das if
immer noch bevorzugen, haben Sie zwei Möglichkeiten:
if [ "$cms" != wordpress -a "$cms" != meganto -a "$cms" != typo3 ]; then
oder
if [ "$cms" != wordpress ] && [ "$cms" != meganto ] && [ "$cms" != typo3 ]; then
Hier ist meine Lösung
if [[ "${cms}" != +(wordpress|magento|typo3) ]]; then