有谁可以告诉我这个脚本会做什么?什么是-z在第3行?
Filename=File.txt
X=`ls /home/$Filename`
if [ -z "$X" ]; then
exit
fi
答案 0 :(得分:5)
Filename=File.txt
$Filename
变量现在具有值File.txt
。
X=`ls /home/$Filename`
$X
变量现在包含命令ls /home/File.txt
的输出。如果文件存在,它将包含一些内容,否则它将是一个空字符串。
if [ -z "$X" ]; then
如果变量$X
的值是空字符串(意味着/home/File.txt
不存在,否则$X
将包含某些内容),那么:
exit
fi
这是一种非常尴尬的写作方式:
if ! [ -e "/home/File.txt" ]; then exit; fi
如果路径存在, -e
将返回true。您还可以检查文件(-f
),目录(-d
),符号链接(-L
)等。查看man [
以获取更多可选项与[
一起使用。你还会在那里找到-z
:
-z string
如果string
的长度为零,则为真。
答案 1 :(得分:1)
脚本的作用是
创建一个名为Filename的变量 Filename的值是File.txt 执行命令ls File.txt 将结果赋给变量X. 然后检查变量X中的值的长度是否为零 如果为零,则脚本将退出 所以基本上你的程序是做什么的,它会检查文件是否存在
您可以使用
代替所有这些线条if [ -a "$Filename"]
此链接对您有所帮助
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
答案 2 :(得分:1)
它测试/home/File.txt
是否存在,&如果没有,exit
。但它不是一个理想的解决方案,最好这样写:
if ! test -e /home/File.txt; then exit; fi
$ help test
test: test [expr]
Evaluate conditional expression.
Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR. Expressions may be unary or binary. Unary
expressions are often used to examine the status of a file. There
are string operators and numeric comparison operators as well.
The behavior of test depends on the number of arguments. Read the
bash manual page for the complete specification.
File operators:
-a FILE True if file exists.
-b FILE True if file is block special.
-c FILE True if file is character special.
-d FILE True if file is a directory.
-e FILE True if file exists.
-f FILE True if file exists and is a regular file.
-g FILE True if file is set-group-id.
-h FILE True if file is a symbolic link.
-L FILE True if file is a symbolic link.
-k FILE True if file has its `sticky' bit set.
-p FILE True if file is a named pipe.
-r FILE True if file is readable by you.
-s FILE True if file exists and is not empty.
-S FILE True if file is a socket.
-t FD True if FD is opened on a terminal.
-u FILE True if the file is set-user-id.
-w FILE True if the file is writable by you.
-x FILE True if the file is executable by you.
-O FILE True if the file is effectively owned by you.
-G FILE True if the file is effectively owned by your group.
-N FILE True if the file has been modified since it was last read.
FILE1 -nt FILE2 True if file1 is newer than file2 (according to
modification date).
FILE1 -ot FILE2 True if file1 is older than file2.
FILE1 -ef FILE2 True if file1 is a hard link to file2.
String operators:
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
Other operators:
-o OPTION True if the shell option OPTION is enabled.
-v VAR True if the shell variable VAR is set
! EXPR True if expr is false.
EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne,
-lt, -le, -gt, or -ge.
Arithmetic binary operators return true if ARG1 is equal, not-equal,
less-than, less-than-or-equal, greater-than, or greater-than-or-equal
than ARG2.
Exit Status:
Returns success if EXPR evaluates to true; fails if EXPR evaluates to
false or an invalid argument is given.