Попробуйте переключить отображение a
на block
, а затем используйте любой желаемый стиль. Элемент a
заполнит элемент li
, и вы сможете изменить его внешний вид по своему желанию. Не забудьте установить li
дополнение на 0.
li {
padding: 0;
overflow: hidden;
}
a {
display: block;
width: 100%;
color: ..., background: ..., border-radius: ..., etc...
}
a.active {
color: ..., background: ...
}
Аргументы, которые вы предоставляете bashscript, будут отображаться в переменных $1
и $2
и $3
, где число ссылается на аргумент. $0
- это сама команда.
Аргументы разделены пробелами, поэтому, если вы предоставите команды -from
и -to
в команде, они тоже попадут в эти переменные, поэтому для это:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Вы получите:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Может быть проще опустить -from
и -to
, например:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Тогда у вас будет:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
Недостатком является то, что вам нужно будет поставить его в правильном порядке. Существуют библиотеки, которые упрощают анализ именованных аргументов в командной строке, но обычно для простых сценариев оболочки вы должны просто использовать простой способ, если это не проблема.
Тогда вы можете сделать:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Двойные кавычки вокруг $1
и $2
не всегда необходимы, но рекомендуются, потому что некоторые строки не будут работать, если вы не ставите их между двойными кавычками.
Используйте переменные "$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 "a b"
, он вызывает bar.sh a b
(два аргумента), а с помощью foo2.sh "a b"
он вызывает bar.sh "a b"
(1 аргумент). Всегда имейте в виду, как параметры передаются и расширяются в bash, это сэкономит вам много головной боли.
Если вы не полностью привязаны к использованию «от» и «к» в качестве имен ваших опций, это довольно просто реализовать с помощью getopts :
while getopts f:t: opts; do
case ${opts} in
f) FROM_VAL=${OPTARG} ;;
t) TO_VAL=${OPTARG} ;;
esac
done
getopts
- это программа, которая обрабатывает аргументы командной строки и удобно анализирует их для вас.
f:t:
указывает, что вы ожидаете 2 параметра, которые содержат значения (обозначенные двоеточием). Что-то вроде f:t:v
говорит, что -v
будет интерпретироваться только как флаг.
opts
- это где текущий параметр сохраняется. Инструкция case
- это то, где вы будете обрабатывать это.
${OPTARG}
содержит значение, следующее за параметром. ${FROM_VAL}
, например, получит значение /home/kristoffer/test.png
, если вы запустили свой скрипт следующим образом:
ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt
Как показывают другие, если вы впервые пишете bash скрипты, которые вы должны действительно читать по некоторым основам. Это было просто краткое руководство по работе getopts
.
f:t:vs
будет -f some_f -t some_t -v -s
– h_s
18 July 2017 в 13:21