0

I've been painstakingly going through this tutorial. I'm a unix noob and getting hung up deciphering some of the commands in the code block below. If any one could help me out with a basic description of what the highlighted commands are doing with respect to their syntax I'd very much appreciated it.

Code Block:

. /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
}

Highlighted Line #1

test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0

Highlighted Line #2

[ ! -f $proc ]

Highlighted Line #3

daemon $bin --log=$log 

Highlighted Line #4

RETVAL=$?

Highlighted Line #5

[ $RETVAL -eq 0 ] && touch $proc
4

2 回答 2

2

几个有用的 linux 语法提示:

  • $SOMETHING表示变量的值SOMETHING,例如SOMETHING="A variable"; echo $SOMETHING将输出A variable
  • 在 linux 中有多种方法可以将命令串在一起。
    • command1 ; command2command2无论第一个命令中发生command1什么,都会运行。
    • command1 && command2只有command2成功完成才会运行command1
    • command1 || command2只有command2command1失败时才会运行。

牢记这些,让我们解决您的问题;

  1. 检查文件是否存在以及文件是否可执行。只有在|| exit 0RETVAL=0测试失败时才会运行。

  2. 检查proc=/var/lock/subsys/Daemon是否不存在,如果不存在,则运行if循环(启动“守护程序”)。

  3. 运行命令daemon(这在后台运行,您可以在在线文档中阅读更多内容)并传递 2 个变量。我们传递的第一个变量是要运行的命令(您之前已使用 设置bin=/home/godlikemouse/Daemon.php),第二个变量是输出日志的位置(也已设置较早log=/var/log/Daemon.log)。它相当于运行daemon /home/godlikemouse/Daemon.php --log=/var/log/Daemon.log。该--log参数将Daemon.php作为命令行参数传递给您的脚本(我认为这是输出日志的位置......)。

  4. RETVAL=$?-?表示上一个运行命令的返回码,作为变量保存和访问。因此,如果命令成功运行,这将是0但如果它有错误或失败,这可能是其他任何东西(但通常是 a 1)。

  5. 这是最后的检查 - 在这种情况下,它使用RETVAL#4 中指定的变量,检查它是否-eq为 0,如果是True,将使用上面指定touch/var/lock/subsys/Daemon文件proc=/var/lock/subsys/Daemon

于 2013-05-29T07:23:23.190 回答
0

1) 测试

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

检查文件是否存在,如果存在则执行它。如果不存在,则以 0RETVAL = 0 退出

2) -F

[ ! -f $proc ]

从手册页:

-f FILE
      FILE exists and is a regular file

检查 $proc 是否不是文件

3) 触摸

[ $RETVAL -eq 0 ] && touch $proc

来自手册页(用于触摸)

Update  the  access  and modification times of each FILE to the current
   time.

它检查 $RETVAL 是否等于 0 并更改 $proc 的修改时间

于 2013-05-29T07:27:51.573 回答