어느 줄이 맞나요? 나는 일을 단계별로 수행합니다.
if [ $? -ne 0 ]; then
정확한 설명을 찾지 못했지만 -ne
이 줄은 마지막으로 수행한 작업이 성공했는지 확인한다는 것을 이해합니다.
ksh $PROC/reg.sh 2>&1 | tee $REG
ksh
즉, PROC에 있는 reg.sh와 함께 korn 쉘을 사용하고 2>&1은 stderr을 지정되지 않은 파일로 리디렉션하고 sterr은 stdout으로 리디렉션합니다. (무엇을 하는지, 목적이 무엇인지 잘 모르겠습니다 | tee $REG
.)
cat $REG >> $DD_LIBEDIT/log.$DATE
cat
연결을 위해 사용했지만 이 줄에는 파일이 하나만 있습니다. 이는 REG가 로그에 연결된다는 의미입니까?
This.$DATE (DATE=`date +%Y%m%d)
로그에 날짜가 추가되나요?
이것은 배치의 작은 부분일 뿐이고 많은 연구를 거쳐도 의미를 이해할 수 없는 부분을 선택하려고 노력했습니다.
답변1
쉘의 매뉴얼 페이지가 도움이 되는 경우가 많습니다. 첫 번째 예를 들어보겠습니다.
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
목록의 실제 명령은 입니다 [
. 이것은 명령이자 쉘 내장입니다.
$ type -a [
[ is a shell builtin
[ is /usr/bin/[
man [
명령 및 man ksh
내장 명령 에 사용됩니다 . (Bash의 경우 help [
내장된 세부 정보도 제공합니다.)
대부분의 경우 명령에 대해 이야기하고 있는지 아니면 내장 명령에 대해 이야기하고 있는지는 중요하지 않습니다. man [
이제 다음과 같이 말하세요.
INTEGER1 -ne INTEGER2
INTEGER1 is not equal to INTEGER2
귀하의 경우 $?
해당 변수의 값을 0과 비교합니다. 또 다른 모습을 살펴보세요 man ksh
:
The following parameters are automatically set by the shell:
? The decimal value returned by the last executed command.
반환 값이 0이면 일반적으로 모든 것이 정상임을 의미합니다. (그러나 특정 명령에 대해서는 매뉴얼 페이지를 확인하여 확인하십시오.)
따라서 if [ $? -ne 0 ]; then
이전 명령은 단순히 오류가 있는지 확인됩니다.
이 cat
명령은 모든 파일을 읽고 표준 출력으로 출력합니다. 그런 다음 셸을 사용하여 파일로 리디렉션할 수 있습니다. 또 다른 모습을 살펴보세요 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.