J'essaie toujours de coller avec POSIX sh au lieu d'utiliser les extensions bash, car l'un des points majeurs du script est la portabilité. (En plus de connexion programmes, ne pas les remplacer)
En sh, il existe un moyen facile de vérifier une condition "is-préfixe".
case $HOST in node*)
your code here
esac
Étant donné l'âge, Arcane et crufty sh est (et bash est pas le remède: Il est plus complexe, moins cohérente et moins portable), je voudrais souligner un aspect fonctionnel très agréable: Alors que certains Les éléments de syntaxe tels que case
sont intégrés, les constructions résultantes ne sont pas différentes de tout autre travail. Ils peuvent être composés de la même manière:
if case $HOST in node*) true;; *) false;; esac; then
your code here
fi
Ou encore plus court
if case $HOST in node*) ;; *) false;; esac; then
your code here
fi
Ou même plus court (juste pour présenter !
comme un élément de langage - mais cela est mauvais style maintenant)
if ! case $HOST in node*) false;; esac; then
your code here
fi
Si vous aimez être explicite, construire votre propre élément de langage:
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
N'est-ce pas plutôt agréable?
if beginswith node "$HOST"; then
your code here
fi
Et puisque sh est essentiellement que des emplois et des chaînes-listes (et en interne les processus, sur lesquels les emplois sont composés), nous pouvons même faire un peu de lumière programmation fonctionnelle:
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
checkresult() { if [ $? = 0 ]; then echo TRUE; else echo FALSE; fi; }
all() {
test=$1; shift
for i in "[email protected]"; do
$test "$i" || return
done
}
all "beginswith x" x xy xyz ; checkresult # prints TRUE
all "beginswith x" x xy abc ; checkresult # prints FALSE
C'est élégant. Pas que je préconise d'utiliser sh pour quelque chose de sérieux - il casse trop vite sur les exigences du monde réel (pas de lambdas, donc il faut utiliser des ficelles ... Mais imbriquer des fonctions avec des chaînes n'est pas possible, les pipes ne sont pas possibles ...)
Ne soyez pas trop tenté de combiner des expressions. Il peut sembler plus laid d'avoir deux conditions distinctes, bien que vous puissiez donner de meilleurs messages d'erreur et rendre votre script plus facile à déboguer. Aussi, j'éviterais les fonctionnalités de bash. L'interrupteur est le chemin à parcourir. – hendry