哪一行是正确的?我一步一步做事。
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.
特别是这意味着在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.