j'ai le morceau suivant de bashscript:
function get_cms {
echo "input cms name"
read cms
cms=${cms,,}
if [ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]; then
get_cms
fi
}
Mais peu importe l’entrée (valeurs correctes et incorrectes), la fonction n’appelle plus car je ne souhaite autoriser qu’une de ces 3 entrées. Je l'ai essayé avec || avec [ var != value ] or [ var != value1 ] or [ var != value1 ]
mais rien ne fonctionne. Quelqu'un peut me diriger dans la bonne direction?
Au lieu de dire:
if [ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]; then
dire:
if [[ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]]; then
Vous voudrez peut-être aussi vous référer à Constructions conditionnelles .
Si l'objectif principal est de vérifier si la valeur fournie ne figure pas dans une liste, vous pouvez peut-être utiliser la correspondance d'expression régulière étendue intégrée dans BASH via l'opérateur "equal tilde" (voir aussi cette réponse ) :
if ! [[ "$cms" =~ ^(wordpress|meganto|typo3)$ ]]; then get_cms ; fi
Bonne journée
Vous devriez peut-être mieux utiliser un case
pour de telles listes:
case "$cms" in
wordpress|meganto|typo3)
do_your_else_case
;;
*)
do_your_then_case
;;
esac
Je pense que pendant longtemps, de telles listes sont mieux lisibles.
Si vous préférez toujours le if
, vous pouvez le faire avec des crochets simples de deux manières:
if [ "$cms" != wordpress -a "$cms" != meganto -a "$cms" != typo3 ]; then
ou
if [ "$cms" != wordpress ] && [ "$cms" != meganto ] && [ "$cms" != typo3 ]; then
Voici ma solution
if [[ "${cms}" != +(wordpress|magento|typo3) ]]; then