2012-03-30 4 views
1

Je souhaite que mon script accepte les arguments variables. Comment puis-je les vérifier individuellement?Arguments variables d'un script shell

Par exemple

./myscript arg1 arg2 arg3 arg4 

or 

./myscript arg4 arg2 arg3 

Les arguments peuvent être un nombre et dans un ordre quelconque. Je voudrais vérifier si la chaîne arg4 est présente ou non indépendamment des numéros d'argument.

Comment faire cela?

Merci,

+0

Ces arguments sont-ils des chaînes fixes (similaires à '--help',' --version', etc.) ou sont-ils "quelque chose"? – sarnold

+0

Dupliquer, http://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-bash-script, http://stackoverflow.com/questions/4528292/passing-multiple-arguments-to -a-unix-shell-script – moodywoody

+0

Ouais. Je passe quelques drapeaux comme arguments au script pas nécessairement dans des nombres fixes. – Kitcha

Répondre

3

La façon la plus sûre — la manière qui gère toutes les possibilités d'espaces dans les arguments, et ainsi de suite — est d'écrire une boucle explicite:

arg4_is_an_argument='' 
for arg in "[email protected]" ; do 
    if [[ "$arg" = 'arg4' ]] ; then 
     arg4_is_an_argument=1 
    fi 
done 
if [[ "$arg4_is_an_argument" ]] ; then 
    : the argument was present 
else 
    : the argument was not present 
fi 

Si vous êtes certain que vos arguments ne contient pas d'espaces — ou du moins, si vous n'êtes pas particulièrement inquiet à propos de ce cas — alors vous pouvez le raccourcir à:

if [[ " $* " == *' arg4 '* ]] ; fi 
    : the argument was almost certainly present 
else 
    : the argument was not present 
fi 
0

peut-être que cela peut aider.

#!/bin/bash 
# this is myscript.sh 

[ `echo $* | grep arg4` ] && echo true || echo false 
0

Ce joue rapide et lâche avec l'interprétation typique de la ligne de commande « arguments », mais je commence la plupart de mes scripts bash avec ce qui suit, comme un moyen facile d'ajouter --help support:

if [[ "[email protected]" =~ --help ]]; then 
    echo 'So, lemme tell you how to work this here script...' 
    exit 
fi 

Le principal inconvénient est que cela sera également déclenché par des arguments comme request--help.log, --no--help, etc. (pas seulement --help, ce qui pourrait être une exigence pour votre solution).

Pour appliquer cette méthode dans votre cas, vous pouvez écrire quelque chose comme:

[[ "[email protected]" =~ arg4 ]] && echo "Ahoy, arg4 sighted!" 

Bonus! Si votre script a besoin d'au moins un argument de ligne de commande, vous pouvez de la même déclencher un message d'aide lorsque aucun argument sont fournis:

if [[ "${@---help}" =~ --help ]]; then 
    echo 'Ok first yer gonna need to find a file...' 
    exit 1 
fi 

qui utilise la syntaxe de substitution vide variable ${VAR-default} à halluciner un argument --help si aucune arguments ont été donnés.

Questions connexes