我需要了解提供给我的脚本是如何工作的。有一些 if 条件、命令和语法我不知道它们的作用,我尝试用 Google 搜索它们,但没有成功。
那么做什么呢
[ -z String ]
?例如脚本中出现的这
[ -z "$(which ssh)" ]
也是$(which ssh)
一个字符串还是一个变量?是什么
~/.filename
意思?我知道它./filename
有时用于执行文件,并且是./
指向目录本身的指针,但是它是什么~/.
?做什么
[ -e filename ]
?做什么
[ ! -d ~/.ssh ]
?
答案1
您可以通过在终端中[
输入来了解更多信息。这是一个在之后使用的测试构造。因此,man [
if
-z STRING
the length of STRING is zero
-e FILE
FILE exists
! EXPRESSION
EXPRESSION is false
-d FILE
FILE exists and is a directory
1)[ -z "$(which ssh)" ]
表示测试是否"$(which ssh)"
为零长度字符串。$(...)
表示...
首先执行该部分。如果您which ssh
在终端中运行,您将看到它将生成shh
可执行文件的路径(如果存在)。因此,如果存在,则字符串将不为零长度,并且测试将失败。
2)~
是你的主目录的快捷方式,通常位于/home/your_user_name
。[ -e filename ]
表示测试此文件是否存在,如果存在则返回 true。
3)[ ! -d ~/.ssh ]
表示测试是否~/.ssh
(可能/home/your_user_name/.ssh
)存在并且是一个目录,如果它是不是,则返回 true。
==编辑==
您应该尝试解决 man 问题,因为这将真正提高您的 bash 知识。如果man [
不行,请尝试man test
。(test
是 的同义词[...]
)如果不行,这里有一个在线版本。
-w FILE
FILE exists and write permission is granted
我觉得你可能搞错了。应该是
[ -w "$1" ]
不是
[ "$1" -w ]