Что я делаю, так это:

Я хотел бы разделить мой сценарий на несколько частей. Какова будет лучшая практика для определения всех моих переменных в одном месте? Должен ли я определить их все в сценарии инициализации и экспорта или есть лучший способ, чтобы каждый кусок моего сценария смотрел в один файл статических переменных? Может быть, в JSON или тому подобное? Вот пример

Проект /main.sh

#!/bin/bash

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

menu () {
    read # blah blah whatcha wanna run?
    # other bits
}   
opts () {
    case ... # a bunch of options
    1) ./src/another_script.sh # one of a bunch of scripts in a separate folder
}
while true
do
   menu
   opts
done

Теперь, в сценарии ./src/another_script.sh, как лучше всего справиться с переменными для простоты и возможности прыжков? (это технический термин)

2 ответа2

4

Создайте независимый файл только с объявлениями переменных:

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

Затем включите этот файл в начале во все ваши файлы сценариев с source /my/variables

1

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

Каталог, в котором хранятся ваши сценарии (~/bin) и / или каталог, в котором хранятся ваши объявления переменных (~/ lib), может быть быстро связан с небольшим изменением переменной среды PATH.

Переменные зависят от среды, из которой они вызываются. Это означает, что если вы экспортируете их, они становятся глобально доступными для вашего использования, но для этого контекста, только для вашей среды входа в систему. Если вы изменяете их внутри скрипта, они сохраняют это значение только во время работы скрипта.

В моем .bashrc я определяю и экспортирую VAR = "переменная входа в систему". Это происходит каждый раз, когда я захожу на мой хост Solaris.

Теперь в этом примере сценария, который я называю proof.bash, я изменю VAR в глобальном контексте сценария, а затем снова в функции внутри сценария. Это не меняет значение переменной после выполнения скрипта.

#!/bin/bash
# VAR is usable because it was declared/exported outside this script.
echo $VAR
#Define bash global variable
#This variable is global and can be used anywhere in this bash script
VAR="global variable"
function see_it_to_believe {
#Define bash local variable
#This variable is local to bash function only
local VAR="local variable"
echo $VAR
}
echo $VAR
see_it_to_believe
# Note the bash global variable did not change
# "local" is bash reserved word
echo $VAR

После запуска скрипта я могу вывести echo $VAR и получить "переменную входа в систему".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .