短縮版
dudekはすでに回答しています。このディレクトリは、システムにプラグインまたはプラグインから外される処理方法をシステムに指示するスクリプトに使用されます。
問題のスクリプトを理解する方法を説明する試みについては、「ロングバージョン」を参照してください。基本的に、いくつかのチェックを実行し、いくつかの外部関数をロードした後start
、コマンドのシーケンス、またはを実行する必要があるかどうかstop
、またはエラーを出して終了するかどうかをチェックします。
そうそう、RPiがあまり好きではない方法でネットワーク構成に触れた場合、リモートアクセスからロックアウトされる可能性が非常に高い。私は自分のRPiで大まかに過去にネットワーキング構成に触れたので、新規インストールから開始する方が簡単でした。慎重に、ローカルにログインしやすい場所にRPiを一時的に移動することを検討してください。
ロングバージョン
私のRPiでこのファイルを見ると、よくコメントされているようで、多くの外部関数呼び出しには使用されません。しかし、あなたは平易な用語を求めてきたので、私はこれらの種類のスクリプトを理解するためにどうやって行くのかを説明するために最善を尽くしますが、あなたは私のようなRPiユーザー(ヘッドレスリモートサーバーのセットアップ)のようですサーバーの要件に役立つ他のトリックがあるので、非表示のWiFiネットワークへの自動再接続のために、RPi StackExchangeですでに書き込んだ内容を確認する必要があるかもしれません。
質問への回答に役立つように、ここにシェルスクリプト構文の解説を少し示します。
シェル~.sh
スクリプトでは、そのように定義された関数を見つけるのが一般的です。
function_name () {
echo "doing stuff for function_name"
}
その後function_name
、スクリプトの後者を介して、時には他の関数内で呼び出されます。関数、スクリプトファイル、およびステートメントが実行するコマンドのリストにすぎない場合。間もの関数の場合{
とは、}
実行された場合のif
間のスタッフたstatments then
とがfi
実行され、instencesにelse
又はelif
内で使用されるif
条件付きたstatments。
分析しているファイルにはdo_start
、という名前の関数と、do_stop
他のファイルで定義されている関数があります...「これらの他の関数はどのファイルと定義されていますか?」または「スクリプトaがファイルbから関数をロードするかどうかを確認するにはどうすればよいですか?」最初に回答する必要がある2つの質問です。
線を中心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
最初のステートメントがfi
合格しなかった場合に実行するアクションを閉じるために、命令は終了します。言い換えれば/etc/wpa_supplicant/functions.shがない場合はありませんexsistは終了し、そうでない場合はそれらの関数をロードして処理を続行します。値またはファイルが存在するかどうかのこの種の二重チェックは、問題のスクリプトおよび他のスクリプト全体で繰り返されるものです。-f
ファイルの-n
チェック、文字列の長さの-x
チェック、ファイルが存在するかどうかだけでなく、スクリプトを実行するユーザーが定義されたファイルに対する実行権限を持っている-s
場合、ファイルが空か-n
どうかを確認し、文字列が空またはnull
値でないかどうかを確認=
し、if
文の文字列(または値)を比較します。Linuxのシェルおよびbashスクリプトにif
ステートメントelif
が表示される他の何かが、別の日です。このスクリプト内には、他に使用されるトリックがあります。if
||
"or"、&&
"and"、および!
"not"演算子などのステートメント(オンライン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
。これらの種類のステートメントは、操作のデコードを支援するために使用できる一定の構造を持っています。
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 IE用start
またはstop
、キーワードが発見された場合、問題のコマンドはtraillingとの間に見られる)
とpreseading ;;
それは、様々なキーのために取るべきdifferantアクションをsepperateするように作用します単語が見つかりました。一部のスクリプトでは、ループcase
内にこれらのステートメントが見つかるかもしれませんfor
が、それもまた別の日です。
スクリプトcase
内のステートメントの場合、ifupdown.sh
最初に変数内のstart
or stop
ステータスを照合し、値を$MODE
使用して、コマンドのシーケンスまたはコマンドのシーケンスを呼び出すか、またはコマンドのシーケンスまたはシーケンスを代わりに呼び出すかをマッチングします。niether も検出された場所もない場合、エラーがログに記録されて出力され、スクリプトはエラー状態で終了します。$PHASE
pre-up
post-up
pre-down
post-down
start
stop
1