我一直在苦心经历这个tutorial。我是一个unix noob并且挂断了解密下面代码块中的一些命令。如果任何人可以帮我解释突出显示的命令在语法方面做了什么,我非常感激。
代码块:
. /etc/init.d/functions
#startup values
log=/var/log/Daemon.log
#verify that the executable exists
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
prog="Daemon"
proc=/var/lock/subsys/Daemon
bin=/home/godlikemouse/Daemon.php
start() {
# Check if Daemon is already running
if [ ! -f $proc ]; then
echo -n $"Starting $prog: "
daemon $bin --log=$log
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $proc
echo
fi
return $RETVAL
}
突出显示的第1行
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
突出显示的第2行
[ ! -f $proc ]
突出显示的第3行
daemon $bin --log=$log
突出显示的第4行
RETVAL=$?
突出显示的第5行
[ $RETVAL -eq 0 ] && touch $proc
答案 0 :(得分:2)
一些有用的linux语法提示:
$SOMETHING
表示变量SOMETHING
的值,例如SOMETHING="A variable"; echo $SOMETHING
会输出A variable
command1 ; command2
将在command2
之后运行command1
。command1 && command2
成功完成,则command2
仅运行command1
。command1 || command2
失败,则command2
仅运行command1
。牢记这些,我们可以解答您的问题;
检查文件是否存在以及文件是否可执行。
只有在测试失败时才会运行|| exit 0RETVAL=0
。
检查proc=/var/lock/subsys/Daemon
是否不存在,如果没有,则运行if
循环(启动“守护程序”)。
运行命令daemon
(这在后台运行,您可以在online documentation中阅读更多内容)并将其传递给2个变量。我们传递的第一个变量是要运行的命令(您之前使用bin=/home/godlikemouse/Daemon.php
设置),第二个变量是输出日志的位置(也在前面设置log=/var/log/Daemon.log
)。它相当于运行daemon /home/godlikemouse/Daemon.php --log=/var/log/Daemon.log
。 --log
参数将作为命令行参数传递给您的Daemon.php
脚本(我假设它是输出日志的位置......)。
RETVAL=$?
- ?
表示上一个运行命令的返回码,该命令作为变量保存和访问。因此,如果命令成功运行,这将是0
,但如果它有错误或失败,则可能是其他任何内容(但通常是1
)。
这是最后的检查 - 在这种情况下,它使用#4中指定的RETVAL
变量,检查它是-eq
ual为0,如果是{{1} } touch
上面指定的True
文件/var/lock/subsys/Daemon
。
答案 1 :(得分:0)
1)TEST
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
来自man :(在你的控制台中键入man test,你会得到这个 - > http://unixhelp.ed.ac.uk/CGI/man-cgi?test)
-x FILE
FILE exists and execute (or search) permission is granted
如果文件存在,chechs,如果是,则执行它。如果它不存在,则退出0RETVAL = 0
2)-F
[ ! -f $proc ]
来自手册页:
-f FILE
FILE exists and is a regular file
检查$ proc是否不是文件
3)TOUCH
[ $RETVAL -eq 0 ] && touch $proc
来自手册页(触摸)
Update the access and modification times of each FILE to the current
time.
它检查$ RETVAL是否等于0并更改$ proc的修改时间