Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash의 제어 연산자와 결합된 명령

명령줄에서 여러 명령을 순서대로 묶는 것과 같은 단순한 복합 명령이 자주 사용됩니다. 이러한 명령은 명령의 끝을 정의하는 세미콜론으로 구분됩니다. 한 줄에 간단한 일련의 셸 명령을 만들려면 다음과 같이 세미콜론을 사용하여 각 명령을 구분하기만 하면 됩니다.

command1 ; command2 ; command3 ; command4 ; 

Enter 키를 누르면 최종 명령이 종료됨을 의미하므로 마지막 세미콜론을 추가할 필요가 없지만 일관성을 위해 추가하는 것이 좋습니다.

오류가 발생하지 않는 한 모든 명령은 문제 없이 실행됩니다. 그러나 오류가 발생하면 어떻게됩니까? &&를 사용하여 오류를 예상하고 허용할 수 있습니다. 그리고 || Bash에 내장된 제어 연산자. 이 두 제어 연산자는 일부 흐름 제어를 제공하고 코드 실행 순서를 변경할 수 있도록 합니다. 세미콜론 및 줄 바꿈 문자도 Bash 제어 연산자로 간주됩니다.

&& 연산자는 단순히 "command1이 성공하면 command2를 실행합니다."라고 말합니다. 어떤 이유로든 command1이 실패하면 command2는 실행되지 않습니다. 해당 구문은 다음과 같습니다.

command1 && command2

이것은 모든 명령이 실행 중에 성공적으로 완료되었는지 또는 실패했는지를 나타내는 코드를 셸에 반환하기 때문에 작동합니다. 규칙에 따라 0(영)의 반환 코드(RC)는 성공을 나타내고 모든 양수는 어떤 유형의 실패를 나타냅니다. 일부 시스템 관리 도구는 오류를 나타내기 위해 1을 반환하지만 많은 경우 오류 유형을 나타내기 위해 다른 양의 숫자 코드를 사용합니다.

Bash 셸의 $? 변수는 스크립트, 명령 목록의 다음 명령 또는 시스템 관리자가 직접 매우 쉽게 확인할 수 있습니다. RC를 살펴보자. 간단한 명령을 실행하고 항상 마지막으로 실행된 명령과 관련된 RC를 즉시 확인할 수 있습니다.

[student@studentvm1 ~]$ ll ; echo "RC = $?"
total 284
-rw-rw-r--  1 student student   130 Sep 15 16:21 ascii-program.sh
drwxrwxr-x  2 student student  4096 Nov 10 11:09 bin
<snip>
drwxr-xr-x. 2 student student  4096 Aug 18 10:21 Videos
RC = 0
[student@studentvm1 ~]$

이 RC는 0이며 명령이 성공적으로 완료되었음을 의미합니다. 이제 권한이 없는 디렉토리에서 동일한 명령을 시도하십시오.

[student@studentvm1 ~]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 ~]$

이 RC의 의미는 ls에서 찾을 수 있습니다. 명령의 매뉴얼 페이지.

&&를 사용해 봅시다. 명령줄 프로그램에서 사용할 수 있는 제어 연산자입니다. 간단한 것부터 시작하겠습니다. 새 디렉토리를 만들고 성공하면 그 안에 새 파일을 만듭니다.

다른 디렉토리를 생성할 수 있는 디렉토리가 필요합니다. 먼저 홈 디렉토리에 테스트를 수행할 수 있는 임시 디렉토리를 만드십시오.

[student@studentvm1 ~]$ cd ; mkdir testdir

~/testdir에 새 ​​디렉토리 생성 , 방금 생성했기 때문에 비어 있어야 하며, 그 새 디렉토리에 비어 있는 새 파일을 생성합니다. 다음 명령은 이러한 작업을 수행합니다.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1 
[student@studentvm1 ~]$ ll ~/testdir/testdir2/
total 0
-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
[student@studentvm1 ~]$

testdir 디렉토리에 액세스하고 쓸 수 있습니다. testdir에 대한 권한 변경 따라서 사용자 학생이 더 이상 액세스할 수 없습니다. 다음과 같이:

[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
d---rwxrw-. 3 student student  4096 Nov 12 14:13 testdir
[student@studentvm1 ~]$

grep 사용 긴 목록 다음에 명령(ll ) testdir에 대한 목록을 보여줍니다. . 사용자 학생이 더 이상 testdir에 액세스할 수 없습니다. 예배 규칙서. 이제 이전과 거의 동일한 명령을 실행하되 testdir 내부에 다른 디렉토리 이름을 생성하도록 변경해 보겠습니다. .

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
[student@studentvm1 ~]$

오류 메시지를 받았지만 && 제어 연산자가 터치를 방지합니다. testdir3을 생성하는 중에 오류가 발생하여 명령이 실행되지 않습니다. . 이러한 유형의 명령줄 논리 흐름 제어는 오류가 복잡해지고 실제로 엉망이 되는 것을 방지할 수 있습니다. 하지만 조금 더 복잡하게 만들어 보겠습니다.

|| 제어 연산자를 사용하면 초기 프로그램 문이 0보다 큰 코드를 반환할 때 실행되는 다른 명령을 추가할 수 있습니다.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
An error occurred while creating the directory.
[student@studentvm1 ~]$

흐름 제어를 사용하는 복합 명령 구문은 && 그리고 || 제어 연산자:

preceding commands ; command1 && command2 || command3 ; following commands

제어 연산자를 사용하는 복합 명령은 흐름 제어 섹션의 명령과 관련될 수 있지만 흐름 제어의 영향을 받지 않는 다른 명령이 앞에 올 수 있습니다. 이러한 모든 명령은 흐름 제어 복합 명령 내에서 발생하는 모든 작업에 관계 없이 실행됩니다.

이러한 흐름 제어 연산자는 결정을 처리하고 문제가 발생했을 때 알려줌으로써 명령줄에서 작업을 보다 효율적으로 수행할 수 있습니다. 명령줄과 스크립트에서 직접 사용합니다.

루트 사용자로 정리하여 디렉토리와 그 내용을 삭제할 수 있습니다.

[root@studentvm1 ~]# rm -rf /home/student/testdir

Bash 제어 연산자를 어떻게 사용합니까? 댓글 섹션에서 알려주십시오.