Я'м пытаюсь сделать скрипт, который должен быть использован такой:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Тогда скрипт будет ОРЗ преобразовать файл изображения в текстовый файл. Вот что я придумать так далеко:
#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1
Но я Дон'т знаю, как получить от
и до
значений. Любые идеи о том, как это сделать?
Доводы о том, что вы предоставляете bashscript появится в переменных$1 и$2и
$3, где число относится к аргумент.
$0` - это сама команда.
Аргументы разделяются пробелами, так что если вы хотели обеспечить -от
и до
в команду, они будут в конечном итоге в этих переменных, и для этого:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Вы'll получить:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Это может быть легче опустить -от
и до
, как:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Затем вы'будете иметь:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
Недостатком является то, что вы'придется поставить его в правильном порядке. Есть библиотеки, которые могут сделать его проще для разбора именованных аргументов в командной строке, но, как правило, для несложных скриптов, Вы должны просто использовать простой способ, если это's нет проблемы.
Тогда вы можете сделать:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Двойные кавычки вокруг $1
и $2
не всегда является необходимым, но рекомендуется, потому что некоторые строки выиграл'т работу, если вы Don'т положить их в двойные кавычки.
Если вы'повторно не полностью прикреплен к использованию "от" и "чтобы" как ваш вариант названия, он'ы довольно легко осуществить это, используя команде getopts:
while getopts f:t: opts; do
case ${opts} in
f) FROM_VAL=${OPTARG} ;;
t) TO_VAL=${OPTARG} ;;
esac
done
команде getopts
- это программа, которая обрабатывает аргументы командной строки и удобно разбирает их для вас.
ф:т:
указывает, что вы'вновь ждет 2 параметров, содержащих значения (обозначается двоеточием). Что-то вроде ф:т:в
Говорит, что -в
будет интерпретироваться как флаг.
выбирает
, где текущие параметры хранятся. "Дело" заявление, где будет этот процесс.
${OPTARG}
содержит значение следующего параметра. ${FROM_VAL}
, например, получить значение `/тест/Кристофер/.ПНГ-если вы запустили скрипт вроде:
ocrscript.sh -Ф /главная/Кристофер/тест.ПНГ-Т /home/kristoffer/test.txt
Как другим предлагаете, если это ваш первый раз пишу скрипт на bash, вы должны действительно прочитать о некоторых основах. Это был просто быстрый учебник о том, как команде getopts
работает.
Использовать переменные в "$1"
в, в "$2"
в, в "$3"
В и т. д. рассуждения доступа. Чтобы получить доступ ко всем из них можно использовать в " Я@$&;
, или, чтобы получить количество аргументов $#
(может быть полезно для проверки слишком мало или слишком много аргументов).
Мне нужно было убедиться, что мои скрипты полностью переносимы между разными машинами, снарядами и даже с Cygwin версии. Далее, Мои коллеги, которые мне приходилось писать сценарии, программисты, так что я в конечном итоге с помощью этого:
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;
Обоснование: я включил `launcher.sh скрипт также, поскольку вся операция имела ряд шагов, которые были квази независимых друг от друга (Я'м говорить тебе: "квази" и, потому что, хотя каждый сценарий может быть запущен сам по себе, они обычно бегут все вместе), а через два дня я узнала, что примерно половина из моих коллег, будучи программисты и все, слишком хорошо, чтобы быть через пусковой файл, выполните в "использование и", или прочитать справку, которая отображается каждый раз, когда они что-то сделали не так, и они были не испортила все дело, запуск скриптов с аргументы в неправильном порядке и жалуясь на то, что скрипты не'т работать должным образом. Будучи холериком, я решил капитально все мои скрипты, чтобы убедиться, что их коллега-доказательство. Выше фрагмент кода был первым делом.
В bash 1 $
- это первый аргумент, передаваемый в скрипт, $2
второй и так далее
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Так что вы можете использовать:
./your_script.sh some_source_file.png destination_file.txt
Объяснение на двойные кавычки;
рассмотрим три сценария:
# foo.sh
bash bar.sh $1
# cat foo2.sh
bash bar.sh "$1"
# bar.sh
echo "1-$1" "2-$2"
Теперь вызвать:
$ bash foo.sh "a b"
1-a 2-b
$ bash foo2.sh "a b"
1-a b 2-
При вызове foo.sh "а в” тогда он вызывает
bar.sh " Би " (два аргумента), и с foo2.sh "а в”вызывает
bar.sh на "Б"` в (1 аргумент). Всегда имейте в виду, как параметры передаются и expaned в bash, это сэкономит вам много головной боли.