2013-09-20 2 views
0

Я хочу создать вспомогательный скрипт Pathogen с использованием .sh-файла. Я знаю, если вы сделаете его исполняемым, его можно запустить как команду, но я понятия не имею, как сделать -o --options или arguments или что-нибудь в этом роде.Создание команды CLI с использованием сценария SH

В основном это то, что я хочу в ответ на самом деле все, что мне нужно знать, как сделать что-то вроде:

pathogen install git://... 

Или что-то вдоль этих линий. Любая помощь приветствуется. :)

+2

[Обязательная ссылка.] (Http://tldp.org/LDP/abs/html/). Ваш вопрос слишком широк, и любой ответ, вероятно, будет выше вашего уровня знаний. Я бы посоветовал вам узнать, по крайней мере, основы сценариев оболочки или просто сделать '$ git clone git: // ...' как каждый пользователь Git-lovin 'Pathogen. – romainl

+0

@romainl Я проверю эту ссылку, я не знал об этом, хотя я и делал Google для этого. Благодаря! – greduan

ответ

1

Баш встроенный getopts не обрабатывает длинный механизм анализа аргументов, насколько я знаю.

getopt(1) - это инструмент, который вы ищете.

Не программа полностью, но вы получите идею

PARSED_OPTIONS=$(getopt -n "$0" -o h123: --long "help,one,two,three:" -- "[email protected]") 
while true; 
do 
    case "$1" in 

    -h|--help) 
     echo "usage $0 -h -1 -2 -3 or $0 --help --one --two --three" 
    shift;; 

    -1|--one) 
     echo "One" 
     shift;; 

    --) 
     shift 
     break;; 
    esac 
done 

Посмотрите на пример кода и объяснение данного here.

+0

Спасибо за ваш ответ! Я приму одно из них, когда узнаю. И я соглашусь с тем, что было наиболее полезно. :) – greduan

1

Передача аргументов является самым простым из двух (см «What are special dollar sign shell variables?» на SO):

#!/bin/sh 
echo "$#"; # total number of arguments 
echo "$0"; # name of the shell script 
echo "$1"; # first argument 

Предполагая, что файл с именем «вещи» (без УДЛИНИТЕЛЯ) и результат выполнения ./stuff hello world:

3 
stuff 
hello 

Передача однобуквенных переключателей (с необязательными связанными параметрами), например ./stuff -v -s hello вы хотите использовать getopts. См. «How do you use getopts» на SO и this great tutorial.Вот пример:

#!/bin/sh 
verbose=1 
string= 
while getopts ":vs:" OPT; do 
    case "$OPT" in 
     v) verbose=0;; 
     s) string="$OPTARG";; 
    esac; 
done; 
if verbose; then 
    echo "verbose is on"; 
fi; 
echo "$string"; 

Линия, имеющий getopts в сочетании с while требует дальнейшего объяснения:

  • while - запустить время цикла, пройдя через все getopts возвращается назад после того, как он обрабатывает
  • getopts :vs: OPT; - программа getopts с 2 аргументами :vs: и OPT
    • getopts - возвращает что-то while может перебрать
    • :vs: - первый аргумент, это описывает то, что переключатели getopts будут искать, пока он разбирает линию SHELL
      • : - первое двоеточие берет getopts из режима отладки , пропустите это, чтобы сделать getopts verbose
      • v - найти переключатель -v, после этого не будет аргументации, просто переключатель
      • s: - найти вариант -s с аргументом после того, как
    • OPT - будет хранить символ, используемый (имя коммутатора), например, "V" или "s"
  • OPTARG - переменная для загрузки значения в течение каждого из итераций while «s. Для v, $OPTARG не будет иметь значения, но для s он будет.

Двоеточие : сообщает getopts искать аргумент после переключения. Единственное исключение состоит в том, что последовательность символов начинается с :, затем она переключает getopts в/из режима отладки/добавления. Например:

getopts :q:r:stu:v будет принимать getopts из режима отладки, покажет это, что переключатели q, r и u воли ожидает арг, в то время как s, t и u не будут. Это было бы применимо к чему-то вроде: stuff -q hello -r world -s -t -u 123 -v

getopts tuv только сказать getopts искать выключатели tu, и v без аргументов, например stuff -t -u -v, и быть подробным

+0

Спасибо за ваш ответ! Я приму одно из них, когда узнаю. И я соглашусь с тем, что было наиболее полезно.:) – greduan

+0

не проблема, не забудьте сделать ваш исполняемый файл скрипта 'chmod + x stuff', и вы можете захотеть использовать bash для своего shebang' #!/Bin/bash' – zamnuts

Смежные вопросы