J'essaye de créer un script shell qui devrait être utilisé comme ceci:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Le script convertira alors le fichier image en fichier texte. Voici ce que j'ai proposé jusqu'à présent:
#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1
Mais je ne sais pas comment obtenir les valeurs -from
et -to
. Des idées sur la façon de procéder?
linux
bash
shell
parameters
Kristoffer
la source
la source
Réponses:
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 finiront également dans ces variables, donc pour ceci:Tu auras:
Il peut être plus facile d'omettre le
-from
et le-to
, comme:Ensuite, vous aurez:
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:
Les guillemets doubles autour du
$1
et du$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.la source
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 :
getopts
est un programme qui traite les arguments de ligne de commande et les analyse pour vous.f:t:
spécifie que vous attendez 2 paramètres contenant des valeurs (indiquées par les deux points). Quelque chose commef:t:v
dit qui-v
ne sera interprété que comme un drapeau.opts
est l'endroit où le paramètre actuel est stocké. Lacase
déclaration est l'endroit où vous allez traiter cela.${OPTARG}
contient la valeur suivant le paramètre.${FROM_VAL}
par exemple obtiendra 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 tutoriel rapide sur la façon dont
getopts
fonctionne.la source
f:t:vs
sera-f some_f -t some_t -v -s
Utilisez les variables
"$1"
,"$2"
,"$3"
et ainsi de suite aux arguments d'accès. Pour accéder à tous, vous pouvez utiliser"$@"
, ou pour obtenir le nombre d'arguments$#
(peut être utile pour vérifier trop peu ou trop d'arguments).la source
Je devais m'assurer que mes scripts sont entièrement portables entre différentes machines, shells et même versions cygwin. De plus, mes collègues pour qui j'ai dû écrire les scripts sont des programmeurs, alors j'ai fini par utiliser ceci:
Raison d'être: j'ai également inclus un
launcher.sh
script, car toute l'opération comportait plusieurs étapes qui étaient 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, étant des 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 mal et ils faisaient tout un gâchis, 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.la source
Dans bash
$1
est le premier argument passé au script, le$2
second et ainsi de suiteVous pouvez donc utiliser:
Explication sur les guillemets doubles;
considérez trois scripts:
Maintenant, invoquez:
Lorsque vous invoquez,
foo.sh "a b"
il invoquebar.sh a b
(deux arguments) et avecfoo2.sh "a b"
luibar.sh "a b"
(1 argument). Gardez toujours à l'esprit la façon dont les paramètres sont passés et développés dans bash, cela vous évitera beaucoup de maux de tête.la source