1973 votes

bash argument d’entrée du cocher script shell

J’ai besoin de vérifier l’existence d’un argument d’entrée. J’ai le script suivant :

Je reçois

Comment puis-je vérifier l’entrée argument1 tout d’abord pour voir si elle existe ?

3313voto

phoxis Points 14005

C'est vrai :

``variable vous indiquera le nombre d’arguments d’entrée, que le script a été adopté

EDIT

Ou vous pouvez vérifier si un argument est une chaîne vide ou pas comme :

Le `` commutateur permettra de tester si l’expansion du « $1 » est une chaîne nulle ou non. Si c’est une chaîne nulle, puis le corps est exécuté.

488voto

Val Points 985

Il est préférable de montrer cette façon

Vous devez normalement sortir si vous avez trop peu d’arguments.

156voto

Aliaksei N. Points 1678

Si vous êtes uniquement intéressé par puisage si un argument est absent, le Paramètre de Substitution est grande:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT

Dans certains cas, vous devez vérifier si l'utilisateur est passé d'un argument au script, et si non, revenir à une valeur par défaut. Comme dans le script ci-dessous:

scale=${2:-1}
emulator @$1 -scale $scale

Ici, si l'utilisateur n'a pas transmis scale comme un 2ème paramètre, je lance émulateur Android avec -scale 1 par défaut. ${varname:-word} est un opérateur d'extension. Il y a d'autres l'expansion des opérateurs ainsi:

  • ${varname:=word} qui définit l'indéfini varname au lieu de renvoyer l' word de la valeur;
  • ${varname:?message} qui renvoie varname si elle est définie et n'est pas null ou imprime l' message et abandonne le script (comme le premier exemple);
  • ${varname:+word} qui renvoie word seulement si l' varname est défini et n'est pas null; retourne null sinon.

49voto

Pegasus Points 368

Pour un noob, surtout quelqu'un qui vient d'une non script contexte, il est également important de mentionner quelques particularités au sujet de ces choses. Comme quand phoxis mentionné la façon dont il doit être fait

if [ $# -eq 0 ]

il aurait pu aussi mentionner que nous avons besoin d'un espace après l'ouverture et la fermeture de corset. Sinon, les choses ne fonctionnent pas. Je suis moi-même un script de noob (je viens de C en arrière-plan) et il a trouvé le chemin difficile. C'est seulement lorsque j'ai décidé de copier la totalité de la chose "comme est" que les choses travaillé pour moi. C'est alors que je compris que je devais laisser un espace après l'accolade d'ouverture et avant la fermeture. Oui je pouvais avoir regardé dans les détails de "si" mais la plupart des gens qui viennent à stackoverflow faire pour obtenir une réponse rapide de choses (pas tous). Par conséquent préciser quelques petites choses serait de le rendre encore meilleur.

Juste un avis.

46voto

devnull Points 45016

Une autre façon de détecter si les arguments passés au script:

((!$#)) && echo No arugments supplied!

Notez que (( expr )) les causes de l'évaluation de l'expression que par les règles de la Coquille de l'Arithmétique.

Pour la sortie en l'absence d'arguments, on peut dire:

((!$#)) && echo No arugments supplied! && exit 1

Un autre (par analogie) façon de dire ci-dessus serait:

let $# || echo No arguments supplied

let $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!

help let dit:

let: let arg [arg ...]

  Evaluate arithmetic expressions.

  ...

  Exit Status:
  If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X