Versi pendek
Dijawab oleh dudek; direktori itu digunakan untuk skrip yang memberi tahu sistem Anda cara menangani hal-hal yang dicolokkan atau dicabut dari situ.
Lihat "Versi panjang" untuk upaya menjelaskan bagaimana saya memahami skrip yang dimaksud. Pada dasarnya setelah menjalankan beberapa pemeriksaan dan memuat beberapa fungsi eksternal memeriksa apakah itu harus menjalankan start
urutan perintah, atau stop
, atau kesalahan keluar dan keluar.
Oh ya, itu sangat baik bisa mengunci Anda dari akses jarak jauh jika Anda menyentuh konfigurasi jaringan dengan cara yang tidak disukai oleh RPi. Saya telah menyentuh konfigurasi jaringan saya secara kasar di masa lalu pada RPi saya sehingga lebih mudah untuk memulai dari instalasi baru. Menjadi cairful dan pertimbangkan untuk memindahkan RPi temperaroly ke lokasi yang mudah untuk login ke lokal.
Versi panjang
Melihat melalui file ini pada RPi saya, sepertinya dikomentari dengan baik dan tidak digunakan untuk banyak panggilan fungsi eksternal. Tapi Anda sudah meminta persyaratan awam jadi saya akan melakukan yang terbaik untuk menjelaskan bagaimana saya bisa memahami skrip semacam ini, meskipun, sepertinya Anda adalah pengguna RPi seperti saya (pengaturan server jarak jauh tanpa kepala) ya mungkin akan memeriksa apa yang telah saya tulis pada RPi StackExchange untuk auto -ectionection ke jaringan WiFi tersembunyi karena mungkin ada trik lain yang berguna untuk kebutuhan server Anda.
Untuk membantu membantu menjawab pertanyaan Anda, berikut ini sedikit perluasan sintaksis skrip shell;
Dalam ~.sh
skrip shell , adalah umum untuk menemukan fungsi yang didefinisikan seperti itu;
function_name () {
echo "doing stuff for function_name"
}
dan kemudian dipanggil function_name
terakhir dalam skrip, terkadang dalam fungsi lain. Fungsi, file skrip dan jika statments hanyalah daftar perintah yang harus dijalankan. Dalam hal fungsi hal-hal antara {
dan }
dijalankan dan dalam kasus if
statments hal-hal antara then
dan fi
dijalankan dan dalam kasus di mana else
atau elif
digunakan dalam if
statments bersyarat.
Untuk file yang kita potong ada beberapa fungsi bernama do_start
, do_stop
dan beberapa fungsi didefinisikan dalam file lain ... "File apa yang fungsi-fungsi lain ini tolak?" atau "Bagaimana saya menemukan jika skrip a memuat fungsi dari file b?" dua pertanyaan yang harus kami jawab terlebih dahulu.
Sekitar garis 48
di /etc/wpa_supplicant/ifdown.sh
ada garis berkomentar (yaitu jalur beguining dengan #
simble; ini diabaikan oleh skrip intrupriter ... kebanyakan) dengan source functions
coventently labbling beberapa baris berikutnya dimaksudkan perpos ~
# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
. /etc/wpa_supplicant/functions.sh
else
exit
fi
Perhatikan ini adalah contoh yang baik dari perilaku scripting; memeriksa apakah ada file di sana sebelum berasumsi itu ada.
Bit pertama if [ -f
memeriksa file di bawah jalur file yang ditentukan. Dan jika ada then
memuat isi file melalui source
(tangan pendek source
perintah .
tapi saya menghindari menggunakannya dalam skrip saya karena dapat diintegrasikan oleh cp
dan dengan perintah lain tetapi ngelantur saya miliki) file yang didefinisikan oleh path. Selanjutnya adalah else
pengecekan bahwa jika file itu tidak ditemukan exit 0
keluar dengan status 0
skrip. Kemudian if
stetment berakhir dengan fi
untuk menutup tindakan yang harus diambil jika statment pertama tidak lulus. Atau dengan kata lain jika /etc/wpa_supplicant/functions.sh tidakada kemudian keluar, jika tidak memuat fungsi-fungsi tersebut dan melanjutkan pemrosesan. Pemeriksaan jenis ini jika ada nilai atau file yang akan Anda lihat berulang di seluruh skrip yang dipertanyakan serta skrip lainnya, -f
pemeriksaan untuk file, -n
memeriksa panjang string, -x
memeriksa tidak hanya jika ada file di sana tetapi juga jika pengguna yang menjalankan skrip memiliki izin yang dapat dieksekusi untuk file yang ditentukan, -s
memeriksa apakah file kosong, -n
memeriksa apakah string tidak kosong atau null
bernilai, dan =
membandingkan string (atau nilai) dalam if
statments. Sesuatu yang lain akan Anda lihat di skrip shell dan bash di Linux dengan if
statments elif
tapi itu untuk hari lain. Di dalam skrip ini ada trik lain yang digunakan selainif
statments seperti ||
"atau", &&
"dan", dan !
"tidak" operator, seperti on line 55
~
# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
exit 0
fi
~ Yang hanya menempatkan negara, jika file didefinisikan oleh $WPA_SUP_BIN
adalah tidak dieksekusi atau file didefinisikan oleh $WPA_CLI_BIN
adalah tidak dieksekusi keluar maka status 0
tanpa pengolahan lebih lanjut. Ini mungkin terlihat rumit pada awalnya tetapi membacanya dengan keras dalam sintaksis yang lebih manusiawi dapat membantu ketika pertama kali belajar, untuk yang sederhana, dan menambahkan komentar #
untuk yang kompleks sangat membantu ketika belajar atau kembali ke topik yang terakhir.
File yang bersumber secara internal juga harus diperiksa jika tidak yakin apa sesuatu yang disebut dalam ifupdown.sh
file. Saya akan menyarankan nano /etc/wpa_supplicant/functions.sh
dan kemudian menggunakan ^w
atau Ctrl+w
untuk mencari-cari nama fungsi yang ingin Anda ketahui lebih lanjut. Karena antara apa pun tugas yang menyebut skrip ini dan kontensi dari functions.sh
sebagian besar berkas puzzel akan ditemukan.
Sekarang hal-hal menjadi agak berbeda di sekitar garis bulat di 135
mana case
statment dimulai, statments semacam ini memiliki struktur tertentu yang dapat kita gunakan untuk membantu memecahkan kode operasi.
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
Dalam contoh di atas seperti pada case
statments lain, kita pada dasarnya mencari konten $some_variable
untuk kata-kata kunci yang didefinisikan, yaitu start
atau stop
jika kata kunci ditemukan maka jalankan perintah yang ditemukan antara trailling )
dan preseading ;;
yang bertindak untuk memisahkan tindakan yang berbeda untuk mengambil berbagai kunci kata-kata ditemukan. Catatan dalam beberapa skrip Anda mungkin menemukan case
statments ini dalam for
loop tetapi itu juga untuk hari lain.
Dalam kasus case
pernyataan dalam ifupdown.sh
skrip, pertama-tama kita mencocokkan status start
atau stop
dalam $MODE
variabel dan menggunakan $PHASE
nilai untuk mencocokkan jika pre-up
atau post-up
urutan perintah harus dipanggil atau jika pre-down
atau post-down
urutan perintah yang harus dipanggil. Jika niether start
atau stop
tempat terdeteksi maka kesalahan dicatat, dicetak dan skrip keluar dengan status 1
kesalahan.