Ksh
對批次的理解
這些行中哪一條是正確的?我一步一步地工作。
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.