简洁版本
已经由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 functionscoventently 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脚本伴见ifstatments 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,其中一个casestatment开始,这类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我们首先要匹配变量中的startor stop状态,$MODE并使用$PHASEvalue来匹配是否应调用命令pre-up或post-up命令序列,或者是否应调用命令pre-down或post-down命令序列。如果start也没有stop检测到错误,则会记录错误,打印错误并以状态1为错误退出脚本。