LINUX.ORG.RU
решено ФорумAdmin

Bash скрипт и выбор параметров из файла

 


0

1

Друзья, подскажите как реализовать такое. Обходился до сегодняшнего дня помощью инструкции case, но параметров становится очень много и скрипт ужасающе растет в объеме. Хочу вынести параметры в отдельный файл конфигурации, а скрипт оставить обработчиком.

case $1 in
1)
  status=$(123)
  ;;
2)
  status=$(123)
  ;;
*)
  ;;
esac

if $status(какое то условие); then
 Что то делаем
fi
Примет скрипта. Как параметр $1 взять из конфига? Конфиг прицепить как знаю, . ./conf в той же директории будет лежать. Ещё ньюанс. В обработчике будут условия, что если параметр $1 отбросил неприемлемый результат, то надо пойти в конфиг и взять параметр следующий за $1, т.е. $1+1



Последнее исправление: achilles_85 (всего исправлений: 1)

Объясни, какая связь между заменой $1 из командной строки на $1 из конфига с тем, что у тебя case по нему делается? По-моему, никакой. Видимо ты плохо объяснил что хочешь поменять.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Плохо объяснил. Сейчас скрипт крутится через case. В нем уже 10 параметром, каждый из них это SQL запрос. Простыня короче знатная. Что хочу: Пример конфига

first=$(<sql_queury>)
second=$(<sql_queury>)
....
....
n=$(<sql_queury>)
В скрипте избавиться от case и вызывать скрипт с параметром названия запроса, ну т.е.
./script.sh first
. Этакая замена case что ли. Скрипт хочу оставить как обработчик, в конфиге запросы и остальные переменные. Также в скрипте есть такие сценарии, что если к примеру я запустил скрипт вот так
./script.sh first
, условие в нем заберет содержимое переменной first, если условие не удовлетворяет требованиям, то нужно чекнуть следующий запрос из конфига, т.е. second. Надеюсь более менее понятно расписал))

achilles_85
() автор топика
Ответ на: комментарий от achilles_85

Ну так загони все запросы в массив строк и обращайся к ним по индексу. Проблема-то в чём?

anonymous
()
Ответ на: комментарий от achilles_85

лучше в конфиге не писать эти first= second= а писать сразу сами запросы по одному на строке

нужную строку из файла можно взять так:

LINE=`head -$NUM $filename | tail -1`

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Использовать pointer variable и значение параметра как часть имени (или все имя) переменной

можно еще файл параметров писать в виде k=v в синтаксисе баш и импортировать в скрипте

query_param1="<sql_query1>"
query_param2="<sql_query2>"
query_param3="<sql_query3>"
...

под paramn использовать удобное имя для запроса

# Импорт списка запросов из файла
. query_list

# Имя переменной из значения параметра
query=query_${1}

# Обращение по новому имени
n=${!query}
m=$(${!query})
CaHbl4
()
Последнее исправление: CaHbl4 (всего исправлений: 1)
Ответ на: комментарий от CaHbl4

По-моему, такие вещи удобнее делать на ассоциативных массивах:

declare -A query_list=(
[param1]="<sql_query1>"
[param2]="<sql_query2>"
)

m=$(${query_list["$1"]})

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.