Versione breve
Ha già risposto dudek; tale directory viene utilizzata per gli script che indicano al sistema come gestire le cose che vengono collegate o scollegate da esso.
Vedi "Versione lunga" per i tentativi di spiegare come sono arrivato a capire la sceneggiatura in questione. Fondamentalmente, dopo aver eseguito alcuni controlli e aver caricato alcune funzioni esterne, verifica se deve eseguire la start
sequenza di comandi o stop
, oppure, uscire e uscire dall'errore.
Oh sì, molto bene potrebbe bloccarti dall'accesso remoto se tocchi le configurazioni di rete in un modo che all'RPi non piace molto. Ho toccato le mie configurazioni di rete in modo così approssimativo in passato sul mio RPi che è stato più semplice iniziare da una nuova installazione. Sii cauto e considera di spostare la temperaroli di RPi in una posizione che è più semplice accedere a localmente.
Versione lunga
Guardando questo file sul mio RPi sembra ben commentato e non viene utilizzato per molte chiamate di funzioni esterne. Ma hai chiesto termini per i laici, quindi farò del mio meglio per spiegare come sto andando a comprendere questo tipo di script, tuttavia, poiché sembra che tu sia un utente RPi come me (configurazione del server remoto senza testa) ya potrebbe voler controllare ciò che ho già scritto su RPi StackExchange per la riconnessione automatica a reti WiFi nascoste in quanto potrebbe avere altri trucchi utili ai requisiti del tuo server.
Per aiutare a rispondere alle tue domande ecco un po 'di scadenza della sintassi dello script di shell;
Negli ~.sh
script di shell è comune trovare funzioni definite in questo modo;
function_name () {
echo "doing stuff for function_name"
}
e poi chiamato tramite function_name
quest'ultimo su nello script, a volte all'interno di altre funzioni. Funzioni, file di script e se le istruzioni sono solo elenchi di comandi da eseguire. Nel caso delle funzioni, le cose tra {
e }
vengono eseguite e nel caso di if
istruzioni le cose tra then
e fi
vengono eseguite e negli istanti in cui else
o elif
vengono utilizzate in if
modo condizionale all'interno delle istruzioni.
Per il file che stiamo disecting ci sono funzioni denominate do_start
, do_stop
e alcune funzioni definite in altri file ... "quali file vengono queste altre funzioni definded?" o "Come trovo se lo script a carica le funzioni dal file b?" sono due domande a cui dovremo rispondere per prime.
Intorno alla linea 48
in /etc/wpa_supplicant/ifdown.sh
c'è una linea commentata (cioè beguining linea con #
simble, che vengono ignorati dallo script intrupriter ... per lo più) con source functions
coventently labbling le prossime righe destinati perpos ~
# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
. /etc/wpa_supplicant/functions.sh
else
exit
fi
Nota che questo è un buon esempio di comportamento di scripting; controllando se c'è un file prima di supporre che lo sia.
Il primo bit if [ -f
sta cercando un file nel percorso del file definito. E se presente then
carica il contenuto del file tramite source
(la scorciatoia del source
comando è .
ma evito di usarlo nei miei script perché può essere erroneamente aggiornato da cp
e altri comandi ma ho il digress) il file definito dal percorso. Il prossimo è un else
controllo che se quel file non è stato trovato exit 0
uscire con lo stato 0
lo script. Quindi lo if
stetment termina con la fi
chiusura delle azioni da eseguire se il primo statment non è stato approvato. O in altre parole se /etc/wpa_supplicant/functions.sh noexsist quindi esce, altrimenti carica quelle funzioni e continua l'elaborazione. Questo tipo di doppio controllo se è presente un valore o un file è qualcosa che vedrai ripetuto in tutto lo script in questione così come altri script, i -f
controlli per i file, -n
controlla la lunghezza della stringa, -x
controlla non solo se c'è un file ma anche se l'utente che esegue lo script dispone delle autorizzazioni eseguibili per il file definito, -s
controlla se un file è vuoto, -n
controlla se la stringa non è vuota o null
valore e =
confronta le stringhe (o i valori) negli if
statuti. Qualcos'altro che vedrai negli script shell e bash su Linux con if
istruzioni, elif
ma è per un altro giorno. All'interno di questo script sono utilizzati altri trucchi oltre aif
istruzioni come ||
"o", &&
"e" e !
"non" operatori, come on line 55
~
# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
exit 0
fi
~ che indica semplicemente gli stati, se il file definito da non$WPA_SUP_BIN
è eseguibile o il file definito da non è eseguibile, uscire con lo stato senza ulteriore elaborazione. All'inizio possono sembrare complessi, ma leggerli ad alta voce in una sintassi più umana può aiutare quando si apprende per la prima volta, per i più semplici, e aggiungere commenti con quelli complessi è davvero utile quando si impara o si torna all'argomento successivo.$WPA_CLI_BIN
0
#
Il file che proviene internamente dovrebbe anche essere ispezionato se non si è sicuri di ciò che qualcosa ha chiamato all'interno del ifupdown.sh
file. Suggerirei nano /etc/wpa_supplicant/functions.sh
quindi di utilizzare ^w
o Ctrl+w
per cercare il nome della funzione di cui desideri saperne di più. Perché tra ciò che mai il compito chiama questo script e la contesa della functions.sh
maggior parte delle parti di puzzle si troverà.
Ora le cose arrivano a cercare una linea rotonda un po ' diversa da 135
dove case
viene avviato uno statment, questi tipi di statments hanno una struttura serena che possiamo usare per aiutare a decodificare le opearations.
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
Nell'esempio precedente, come con altre case
affermazioni, stiamo essenzialmente cercando il contenuto delle $some_variable
parole chiave defiened, ovvero start
o stop
e se viene trovata la parola chiave, emettiamo i comandi trovati tra il trailing )
e il presead ;;
che agiscono per separare le diverse azioni da intraprendere per varie chiavi parole trovate. Nota in alcuni script potresti trovare queste case
istruzioni all'interno di for
loop ma anche quello è per un altro giorno.
Nel caso delle case
istruzioni all'interno ifupdown.sh
di script stiamo primo corrispondente al start
o stop
status all'interno $MODE
variabile e utilizzando $PHASE
il valore in modo che corrisponda se pre-up
o post-up
sequenza di comando dovrebbe essere chiamata o se la pre-down
o post-down
sequenza di comandi dovrebbe essere chiamato invece. Se niether start
né stop
dove rilevato, viene registrato un errore, stampato e lo script viene chiuso con stato 1
un errore.