简洁版本
已经由dudek回答;该目录用于脚本,这些脚本告诉您的系统如何处理插入或拔出的内容。
请参阅“长版”以尝试解释我如何理解有关脚本。基本上,在运行了一些检查并加载了一些外部函数之后,它会检查是否应运行start
命令序列,或stop
,错误输出并退出。
哦,是的,如果您以RPi不太喜欢的方式触摸网络配置,那么很可能使您无法进行远程访问。过去,我在RPi上已经大致接触到了网络配置,因此从全新安装开始更容易。保持谨慎,可以考虑将RPi临时移动到易于登录的位置。
长版
在我的RPi上浏览此文件时,它似乎已得到很好的注释,并且它并不用于许多外部函数调用。但是,您已经要求外行术语,因此,我将尽我最大的努力来解释我如何理解这些类型的脚本,因为看起来您像我一样是RPi用户(无头远程服务器设置)可能要检查我在RPi StackExchange上已经写过的内容,以便自动重新连接到隐藏的WiFi网络,因为它可能还有其他对服务器要求有用的技巧。
为了帮助回答您的问题,这里有一些shell脚本语法说明;
在shell ~.sh
脚本中,通常会找到这样定义的函数;
function_name () {
echo "doing stuff for function_name"
}
然后function_name
在脚本中(有时在其他函数中)通过后者调用。函数,脚本文件以及语句是否只是要运行的命令列表。对于函数,在{
和}
之间运行if
的东西,对于语句,在then
和fi
之间运行的东西,以及在实例中有条件地在else
或elif
中使用的实例if
。
对于我们要分析的文件,有一个名为的函数do_start
,do_stop
而在其他文件中定义了一些函数...“这些其他函数定义了哪些文件?” 或“如何查找脚本a是否从文件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
指示fi
以结束动作结束。换句话说,如果/etc/wpa_supplicant/functions.sh 没有存在,然后退出,否则加载那些功能并继续处理。这种双重检查是否存在值或文件是您在整个脚本以及其他脚本中都会反复看到的内容,包括-f
检查文件,-n
检查字符串长度,-x
不仅检查文件是否存在,还检查文件是否存在如果运行脚本的用户对所定义的文件具有可执行权限,则-s
检查文件是否为空,-n
检查字符串是否为空或null
值,并=
比较if
语句中的字符串(或值)。别的东西,你会在Linux shell和bash脚本伴见if
statments 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
大多数puzzel peces的内容之间都会发现。
现在,事情得到looing有点歧“圆线135
,其中一个case
statment开始,这类statments有,我们可以用它来帮助解码opearations一个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
语句一样,我们基本上是在搜索内容中$some_variable
查找被定义的关键字,即start
或stop
,如果找到了关键字,则发出在拖尾)
和预封之间找到的命令,这些命令;;
用于将不同的动作分开以采取不同的键找到单词。请注意,在某些脚本中,您可能会case
在for
循环中找到这些语句,但这也是另一天的事情。
对于脚本中的case
语句,ifupdown.sh
我们首先要匹配变量中的start
or stop
状态,$MODE
并使用$PHASE
value来匹配是否应调用命令pre-up
或post-up
命令序列,或者是否应调用命令pre-down
或post-down
命令序列。如果start
也没有stop
检测到错误,则会记录错误,打印错误并以状态1
为错误退出脚本。