麻烦解释一些Unix语法

时间:2013-05-29 07:17:06

标签: unix syntax

我一直在苦心经历这个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

2 个答案:

答案 0 :(得分:2)

一些有用的linux语法提示:

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

牢记这些,我们可以解答您的问题;

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

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

  3. 运行命令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脚本(我假设它是输出日志的位置......)。

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

  5. 这是最后的检查 - 在这种情况下,它使用#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的修改时间