Укороченная версия
Ответили уже Dudek; этот каталог используется для сценариев, которые сообщают вашей системе, как обрабатывать вещи, подключенные к ней или отключенные от нее.
См. «Длинную версию», чтобы попытаться объяснить, как я понял сценарий, о котором идет речь. В основном, после запуска некоторых проверок и загрузки некоторых внешних функций, он проверяет, должен ли он выполнять либо start
последовательность команд stop
, либо ошибки или выходить из системы.
О, да, это очень хорошо может заблокировать вас от удаленного доступа, если вы прикоснетесь к сетевым настройкам так, как RPi не очень нравится. Я уже почти коснулся своих сетевых настроек на моем RPi, так что проще было начать с новой установки. Будьте внимательны и подумайте о перемещении температуры RPi в место, куда проще войти в локальную сеть.
Длинная версия
Просматривая этот файл на моем RPi, он кажется хорошо прокомментированным и бесполезным для многих вызовов внешних функций. Но вы просили терминов для непрофессионалов, поэтому я сделаю все возможное, чтобы объяснить, как я собираюсь разобраться в этих видах сценариев, хотя, похоже, вы такой же пользователь RPi, как я (настройка удаленного сервера без головы), да может быть, мне стоит проверить, что я уже переписал на RPi StackExchange для автоматического повторного подключения к скрытым сетям WiFi, поскольку у него могут быть другие приемы, полезные для требований вашего сервера.
Чтобы помочь в ответе на ваши вопросы, приведено несколько изменений синтаксиса сценариев оболочки;
В ~.sh
сценариях оболочки часто можно найти функции, определенные так;
function_name () {
echo "doing stuff for function_name"
}
и затем вызывается через function_name
последний в скрипте, иногда в других функциях. Функции, файлы сценариев и, если отчеты - это просто списки команд для запуска. В случае функций вещи между {
и }
запускаются, а в случае if
статистик вещи между then
и fi
запускаются и в инстинктах, где else
или elif
используются в пределах if
инструкций условно.
Для файла мы disecting есть функции с именами do_start
, do_stop
и некоторые функции , определенные в других файлах ... «Какие файлы эти другие функции definded?» или "Как мне найти скрипт, загружающий функции из файла b?" два вопроса, на которые мы должны ответить в первую очередь.
Вокруг линии 48
в /etc/wpa_supplicant/ifdown.sh
есть комментировали линия (т.е. линии beguining с #
simble, они игнорируются скрипт intrupriter ... в основном) с source functions
coventently labbling следующие несколько строк предназначена perpos ~
# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
. /etc/wpa_supplicant/functions.sh
else
exit
fi
Обратите внимание, что это хороший пример поведения сценариев; проверка наличия файла, прежде чем предполагать, что это так.
Первый бит if [ -f
проверяет файл по указанному пути к файлу. И если в настоящее время then
загружать содержимое файла через source
(сокращенная source
команда, .
но я избегаю использовать его в моих сценариях, потому что это может быть неправильно использовано cp
другими командами, но у меня есть отклонения ), файл определяется путем. Далее следует else
проверить, что если этот файл не найден, exit 0
завершите работу со статусом 0
сценария. Затем if
stetement заканчивается, fi
чтобы закрыть действия, которые нужно предпринять, если первый устав не прошел. Или, другими словами, если /etc/wpa_supplicant/functions.sh неexsist затем завершите работу, в противном случае загрузите эти функции и продолжите обработку. Этот вид двойной проверки, если значение или файл присутствует, является тем, что вы увидите, повторяется в рассматриваемом сценарии, а также в других сценариях, -f
проверяет файлы, -n
проверяет длину строки, -x
проверяет не только наличие файла, но и если пользователь, выполняющий сценарий, имеет права на выполнение исполняемого файла для определенного файла, -s
проверяет, является ли файл пустым, -n
проверяет, является ли строка пустой или пустой null
, и =
сравнивает строки (или значения) в if
статистике. Что-то еще вы увидите в сценариях оболочки и bash в Linux со if
статистикой, elif
но это на другой день. В этом сценарии используются другие приемы в дополнение кif
операторы, такие как ||
«или», &&
«и», а также !
«не», например, в строке 55
~
# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
exit 0
fi
~ которые просто помещают состояния, если файл, определенный $WPA_SUP_BIN
как, не является исполняемым, или файл, определенный $WPA_CLI_BIN
как, не является исполняемым, завершается со статусом 0
без дальнейшей обработки. Поначалу это может показаться сложным, но чтение их вслух в более человеческом синтаксисе может помочь при первом изучении, для простых, и добавление комментариев #
к сложным действительно полезно при изучении или возвращении к последнему предмету.
Файл, исходящий изнутри, также должен быть проверен, если вы не уверены, что именно вызывается в ifupdown.sh
файле. Я бы предложил, nano /etc/wpa_supplicant/functions.sh
а затем использовал ^w
или Ctrl+w
для поиска названия функции, о которой вы хотите узнать больше. Потому что между тем, что когда-либо называет этот сценарий задачей, и удовлетворением functions.sh
большинства загадочных вещей.
Теперь дело доходит до того, что можно зацикливаться на несколько иной круглой линии, 135
в case
которой начинается определение, такие типы оценок имеют структуру sertain, которую мы можем использовать, чтобы помочь декодировать операции.
case $some_variable in
start)
echo "The word [start] was detected in \$some_variable"
;;
stop)
echo "The word [stop] was detected in \$some_variable"
;;
*)
echo "The word [$some_variable] was detected in \$some_variable but not understood"
;;
esac
В приведенном выше примере , как и с другими case
statments мы в основном ищем содержимое $some_variable
для ключевых слов defiened, то есть start
или stop
если ключевое слово найдено , то команд выдают найденные между trailling )
и preseading , ;;
который действует на sepperate differant действия предпринять для различного ключа слова найдены. Обратите внимание, что в некоторых скриптах вы можете найти эти case
оценки внутри for
циклов, но это также относится к другому дню.
В случае case
заявления в рамках ifupdown.sh
сценария мы предварительно соответствие start
или stop
статус в $MODE
переменной и использовать $PHASE
значение , чтобы соответствовать , если pre-up
или post-up
последовательность команд должна быть вызвана или если pre-down
или post-down
последовательность команд должна вызываться вместо этого. Если start
ни stop
то, ни другое не обнаружено, то ошибка регистрируется, распечатывается, и сценарий завершается со статусом 1
ошибка.