Ksh

對批次的理解

  • October 23, 2018

這些行中哪一條是正確的?我一步一步地工作。

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是拼接成log的呢?

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

它會將 DATE 添加到日誌中嗎?

這只是Batch的一小部分,即使經過多次研究,我也試圖選擇那些我無法理解的意思。

您的 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.

特別是這意味著之間if存在then一個“列表”,即一個被執行的命令。

列表的實際命令是[. 這既是一個命令,也是一個內置的 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.

引用自:https://unix.stackexchange.com/questions/185258