J'apprends bash.
Je voudrais faire un script simple qui, lorsqu'il n'est pas donné d'arguments, montre un message. Et quand je donne des nombres comme argument, en fonction de la valeur, cela fait une chose ou une autre.
J'aimerais également connaître les suggestions des meilleurs manuels en ligne pour les débutants en bash
Merci
> /dev/null
et / ou2> /dev/null
après cela pour envoyer sa sortie standard et / ou ses flux d'erreur standard dans l'oubli.exit 1
). Il existe d'autres conventions sur les codes retour / sortie, que vous pouvez trouver en ligne rapidement, mais le point important est qu'il ne doit pas être 0, ce qui indique un succès.Si seulement intéressé à renflouer si un argument particulier est manquant, la substitution de paramètres est excellente:
la source
Exemple
Résultat
Détails
-z est l'opérateur unaire pour la longueur de la chaîne est zéro.
$*
est tous les arguments. Les guillemets sont pour la sécurité et encapsulent plusieurs arguments s'ils sont présents.Utilisez
man bash
et recherchez ( / key) pour "unaire" pour plus d'opérateurs comme celui-ci.la source
-z
à étourdirVieux mais j'ai des raisons de retravailler la réponse maintenant grâce à une certaine confusion précédente:
Cela fera écho à "Quelque chose" s'il n'y a pas d'argument positionnel $ 1. Cependant, cela ne confirme pas que $ 1 contient des informations spécifiques.
la source
$#
est explicitement le nombre entier du nombre d'arguments; ce sera soit "0", et vous ferez écho "quelque chose" même s'il n'y a pas d'arguments, ou ce sera un nombre positif, et vous ferez écho "quelque chose" correctement. Mais le contrôle lui-même ne fera jamais rien, indépendamment de l'entrée ou du manque d'entrée que vous utilisez - il rapportera toujours qui$#
contient une valeur. C'est donc complètement faux et ne fonctionnera jamais comme prévu.echo $#
tant que contenu d'un script /tmp/test.sh, puis exécutez-le sous / bin / bash ainsi que / bin / sh (ou / bin / dash et toute autre implémentation de shell dont vous disposez./tmp/test.sh
Fera écho "0" à la console, comme le fera/bin/dash /tmp/test.sh
. D'autre part,/tmp/test.sh foo
fera écho "1", et/tmp/test.sh first second
fera écho "2".man bash
dans la section "Paramètres spéciaux", "Le shell traite plusieurs paramètres spécialement. Ces paramètres ne peuvent être référencés que; leur affectation n'est pas autorisée.", Et "# S'étend au nombre de paramètres de position en décimal." Il est également mandaté par POSIX comme décrit dans pubs.opengroup.org/onlinepubs/9699919799/utilities/…