2013-05-13 3 views
0

Прямо сейчас у меня есть рабочий скрипт для передачи 2 аргументов в сценарий оболочки. Скрипт в основном принимает URL-адрес билета # и svn в качестве аргументов в командной строке и дает результат всех изменений, которые были изменены, связанные с этим билетом # (в комментариях svn).Как передать массив аргументов в сценарии оболочки?

#!/bin/sh 

jira_ticket=$1 
src_url=$2 


revs=(`svn log $2 --stop-on-copy | grep -B 2 $1 | grep "^r" | cut -d"r" -f2 | cut -d" " -f1| sort`) 

for revisions in ${!revs[*]} 
    do 
    printf "%s %s\n" ${revs[$revisions]} 
done 

Выход:

4738 
4739 
4743 
4744 
4745 

мне нужна помощь, чтобы передать массив аргументов - означает больше, чем один билет # и дать выход изменений, связанные с этими номерами билетов, которые передавались в качестве аргументов в сценарий.

ответ

0

Я не думаю, что POSIX оболочка имеет массивы, так быть простыми и использовать #!/bin/bash

Я бы поставил URL в качестве первого арг, и все сброшены билеты

#!/bin/bash 
revs=() 
src_url=$1 
svn_log=$(svn log "$src_url" --stop-on-copy) 
shift 
for jira_ticket in "[email protected]"; do 
    revs+=($(grep -B 2 "$jira_ticket" <<< "$svn_log" | grep "^r" | cut -d"r" -f2 | cut -d" " -f1)) 
done 
for revisions in $(printf "%s\n" "${!revs[@]}" | sort) 
    do 
    printf "%s %s\n" ${revs[$revisions]} 
done 
+0

1/Что такое $ 1 и $ 2 здесь? 2/Что, если есть 3-й аргумент, который будет передан как $ target_url? – iaav

+0

@iaav, я немного обновил ответ, чтобы исправить мои ошибки при вставке кода. Это должно быть более ясно. Кроме того, он вызывает только 'svn log' один раз, поэтому немного оптимизирован. –

+0

Я подозреваю, что я не ответил на ваш реальный вопрос: пожалуйста, опубликуйте вывод 'svn log' –

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