对批次的理解

对批次的理解

哪一行是正确的?我一步一步做事。

if [ $? -ne 0 ]; then

我没有找到任何正确的解释,-ne但我明白这一行检查最后执行的操作是否成功。

ksh $PROC/reg.sh 2>&1 | tee $REG

ksh意味着我将使用位于 PROC 中的 reg.sh 的 korn shell,2>&1 将 stderr 重定向到未指定的文件,并将 sterr 重定向到 stdout。 (我不太明白它的作用,也不明白它的作用是什么| tee $REG

cat $REG >> $DD_LIBEDIT/log.$DATE

cat用于连接,但在这一行中它们只有一个文件,这是否意味着 REG 被连接到日志中?

This.$DATE (DATE=`date +%Y%m%d)

它会将日期添加到日志中吗?

这只是批次中的一小部分,即使经过多次研究,我也尝试选择那些我无法理解含义的部分。

答案1

shell 的手册页通常会有帮助。让我们举第一个例子。

if [ $? -ne 0 ]; then

在我的系统上man ksh说:

   if list ;then list [ ;elif list ;then list ] ... [ ;else list ] ;fi
          The list following if is executed and, if it returns a zero exit  sta‐
          tus,  the  list  following the first then is executed.  Otherwise, the
          list following elif is executed and, if its value is  zero,  the  list
          following  the  next  then  is executed.  Failing each successive elif
          list, the else list is executed.  If the if  list  has  non-zero  exit
          status  and  there is no else list, then the if command returns a zero
          exit status.

特别是这意味着在ifthen之间有一个“列表”,即要执行的命令。

列表的实际命令是[。这既是一个命令,也是一个 shell 内置命令:

$ type -a [  
[ is a shell builtin
[ is /usr/bin/[

用于man [命令和man ksh内置命令。 (对于 bashhelp [也会为您提供内置的详细信息。)

大多数时候,我们谈论的是命令还是内置命令并不重要。man [现在说:

   INTEGER1 -ne INTEGER2
          INTEGER1 is not equal to INTEGER2

在您的情况下,它将将该变量的值$?与零进行比较。再次看一下man ksh

   The following parameters are automatically set by the shell:
          ?      The decimal value returned by the last executed command.

返回值为零通常意味着一切正常。 (但请检查特定命令的手册页以进行确定。)

因此if [ $? -ne 0 ]; then将简单地检查前面的命令是否发生错误。


cat命令将读取所有文件并将它们输出到标准输出。然后您可以使用 shell 将其重定向到文件。再次看一下man ksh

   >>word        Use  file  word  as  standard output.  If the file exists, then
                 output is appended to it (by first seeking to the end-of-file);
                 otherwise, the file is created.

相关内容