GNU/Linux >> Tutoriels Linux >  >> Linux

Paramètres de script dans Bash

Si vous n'êtes pas complètement attaché à l'utilisation de "from" et "to" comme noms d'options, il est assez facile de l'implémenter en utilisant getopts :

while getopts f:t: opts; do
   case ${opts} in
      f) FROM_VAL=${OPTARG} ;;
      t) TO_VAL=${OPTARG} ;;
   esac
done

getopts est un programme qui traite les arguments de la ligne de commande et les analyse facilement pour vous.

f:t: spécifie que vous attendez 2 paramètres qui contiennent des valeurs (indiquées par les deux-points). Quelque chose comme f:t:v dit que -v ne sera interprété que comme un indicateur.

opts est l'endroit où le paramètre actuel est stocké. Le case est l'endroit où vous traiterez cela.

${OPTARG} contient la valeur suivant le paramètre. ${FROM_VAL} obtiendra par exemple la valeur /home/kristoffer/test.png si vous avez exécuté votre script comme :

ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt

Comme les autres le suggèrent, si c'est la première fois que vous écrivez des scripts bash, vous devriez vraiment lire quelques notions de base. Ce n'était qu'un rapide tutoriel sur la façon dont getopts fonctionne.


Les arguments que vous fournissez à un bashscript apparaîtront dans les variables $1 et $2 et $3 où le nombre fait référence à l'argument. $0 est la commande elle-même.

Les arguments sont séparés par des espaces, donc si vous fournissez le -from et -to dans la commande, ils se retrouveront également dans ces variables, donc pour ceci :

./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt

Vous obtiendrez :

$0    # ocrscript.sh
$1    # -from
$2    # /home/kristoffer/test.png
$3    # -to
$4    # /home/kristoffer/test.txt

Il serait peut-être plus simple d'omettre le -from et le -to , comme :

ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt

Ensuite, vous aurez :

$1    # /home/kristoffer/test.png
$2    # /home/kristoffer/test.txt

L'inconvénient est que vous devrez le fournir dans le bon ordre. Il existe des bibliothèques qui peuvent faciliter l'analyse des arguments nommés sur la ligne de commande, mais généralement, pour les scripts shell simples, vous devez simplement utiliser la méthode la plus simple, si cela ne pose aucun problème.

Ensuite, vous pouvez faire :

/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1

Les guillemets autour du $1 et le $2 ne sont pas toujours nécessaires mais sont conseillés, car certaines chaînes ne fonctionneront pas si vous ne les mettez pas entre guillemets doubles.


Utilisez les variables "$1" , "$2" , "$3" et ainsi de suite pour accéder aux arguments. Pour accéder à tous, vous pouvez utiliser "[email protected]" , ou pour obtenir le nombre d'arguments $# (peut être utile pour vérifier trop peu ou trop d'arguments).


Je devais m'assurer que mes scripts sont entièrement portables entre différentes machines, shells et même versions de cygwin. De plus, mes collègues pour qui j'ai dû écrire les scripts sont des programmeurs, donc j'ai fini par utiliser ceci :

for ((i=1;i<=$#;i++)); 
do

    if [ ${!i} = "-s" ] 
    then ((i++)) 
        var1=${!i};

    elif [ ${!i} = "-log" ];
    then ((i++)) 
        logFile=${!i};  

    elif [ ${!i} = "-x" ];
    then ((i++)) 
        var2=${!i};    

    elif [ ${!i} = "-p" ]; 
    then ((i++)) 
        var3=${!i};

    elif [ ${!i} = "-b" ];
    then ((i++)) 
        var4=${!i};

    elif [ ${!i} = "-l" ];
    then ((i++)) 
        var5=${!i}; 

    elif [ ${!i} = "-a" ];
    then ((i++)) 
        var6=${!i};
    fi

done;

Justification :J'ai inclus un launcher.sh script également, puisque toute l'opération comportait plusieurs étapes quasi indépendantes les unes des autres (je dis "quasi", car même si chaque script pouvait être exécuté seul, ils étaient généralement tous exécutés ensemble), et en deux jours, j'ai découvert qu'environ la moitié de mes collègues, programmeurs et tous, étaient trop bons pour utiliser le fichier de lancement, suivre "l'utilisation" ou lire l'AIDE qui s'affichait à chaque fois qu'ils faisaient quelque chose de mal et qu'ils faisaient un gâchis de tout, exécutant des scripts avec des arguments dans le mauvais ordre et se plaignant que les scripts ne fonctionnaient pas correctement. Étant le colérique que je suis, j'ai décidé de réviser tous mes scripts pour m'assurer qu'ils sont à l'épreuve des collègues. Le segment de code ci-dessus était la première chose.


Linux
  1. Ajouter des arguments et des options à vos scripts Bash

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Comment définir les paramètres lorsque Pipe Bash Script to Bash ?

  4. Comment passer des paramètres à un script Bash ?

  5. Exécutez la commande bash sur le pipeline jenkins

35 exemples de scripts bash

Pourquoi cat /dev/urandom a suspendu mon script bash ?

Comment puis-je tester mon script Bash sur des versions plus anciennes de Bash ?

Pourquoi mettre des choses autres que /home sur une partition séparée ?

Autorisations d'écriture des utilisateurs SFTP chrootés

Comment changer /tmp par défaut en /home/user/tmp