Bash에서 스크립트를 작성할 때 숙련된 프로그래머뿐만 아니라 Bash 셸을 처음 접하는 사람들도 문자열 작업에 직면하게 됩니다. 이것은 사용자가 실행 가능한 스크립트에 대한 인수로 입력한 명령을 읽을 때와 텍스트 파일을 처리할 때 가장 자주 필요합니다. 그리고 이 경우에 필요한 트릭 중 하나는 문자열 비교입니다.

이 기사에서는 Bash 문자열을 비교하고 비교 작업을 사용하고 일반적인 오류를 해결하는 몇 가지 뉘앙스를 살펴봅니다.

이러한 작업을 통해 비교된 문자열이 동일한지 여부를 확인할 수 있습니다.

  • = - 예를 들어 같음 if [ "$x" = "$y" ]
  • == - 예를 들어 "=" 연산자의 동의어 if [ "$x" == "$y" ]
  • != - 같지 않음, 예를 들어 if [ "$x" != "$y" ]

#!/bin/bash
testuser=안톤
if [ $USER = $testuser ]
그 다음에
echo "$testuser를 환영합니다"
파이

스크립트 결과:

명령어와 동일한지 확인할 때 테스트(대괄호와 동의어) 비교 문자열의 모든 구두점 및 대소문자 차이가 고려됩니다.

패턴과 일치하는 문자열의 일부 기능:

# $x에 포함된 문자열이 "y"로 시작하면 true를 반환합니다.
[[ $x == y* ]]
# $x의 문자열이 정확히 두 문자 "y*"이면 true를 반환합니다.
[[ $x == "y*" ]]
# $x에 "y"로 시작하는 현재 디렉토리에 포함된 파일 이름이 포함되어 있으면 true를 반환합니다.
[ $x == y* ]
# 문자열 $x가 두 문자 "y*"와 같으면 true를 반환합니다.
[ "$x" == "y*" ]

예를 들어, bash 문자열을 확인하여 y로 시작하는지 확인합니다.

#!/bin/bash
x=얀덱스
[[ $x == y* ]]
에코 $?

코드 실행 결과:

마지막으로 실행된 명령어의 오류 코드를 요청했기 때문에 스크립트는 0(영)을 출력합니다. 코드 0은 스크립트가 오류 없이 실행되었음을 의미합니다. 과연 변수는 $x문자열을 포함 얀덱스, 문자 "y"로 시작합니다. 그렇지 않으면 "1"이 쓰여질 수 있습니다. 이것은 스크립트를 디버그하는 매우 편리한 방법입니다.

Bash에서 알파벳 순으로 문자열 비교

문자열이 오름차순 정렬 순서로 다른 문자열의 선행 항목인지 확인하려고 할 때 작업이 더 복잡해집니다. bash 셸에서 스크립트를 작성하는 사람들은 종종 Linux 문자열 비교와 관련하여 보다 크고 작음 연산과 관련하여 두 가지 문제에 부딪히는데, 이 문제는 매우 간단한 솔루션을 제공합니다.

첫째, "보다 큼" 및 "보다 작음" 문자는 앞에 백슬래시(\)를 추가하여 이스케이프해야 합니다. 그렇지 않으면 셸에서 리디렉션 문자로, 문자열을 파일 이름으로 처리하기 때문입니다. 이것은 버그를 추적하는 것이 매우 어려운 경우 중 하나입니다.

#!/bin/bash
# 문자열 비교 연산자의 잘못된 사용
val1=야구
val2=하키
만약 [ $val1 > $val2 ]
그 다음에

또 다른

파이

bash 문자열을 비교하면 어떻게 될까요?

보시다시피 "보다 큼" 기호만 직접적인 형태로 오류가 생성되지는 않았지만 잘못된 결과를 생성했습니다. 이 경우 이 문자로 인해 출력 스트림이 리디렉션되어 구문 오류가 발견되지 않았으며 결과적으로 하키:

이 오류를 수정하려면 조건이 다음과 같이 보이도록 ">" 문자를 이스케이프해야 합니다.

...
만약 [ $val1 \> $val2 ]
...

그러면 프로그램 결과가 정확합니다.

둘째, "보다 큼" 및 "보다 작음" 연산자를 사용하여 정렬된 문자열은 명령에서 발생하는 것과 다르게 배열됩니다. 종류. 여기에서 문제를 인식하기가 더 어려우며 비교가 대소문자를 구분하지 않으면 문제가 전혀 발생하지 않을 수 있습니다. 팀에서 종류그리고 테스트비교가 다릅니다:

#!/bin/bash
val1=테스트 중
val2=테스트
만약 [ $val1 \> $val2 ]
그 다음에
echo "$val1이 $val2보다 큽니다"
또 다른
echo "$val1이 $val2보다 작습니다"
파이

코드 결과:

팀에서 테스트대문자 문자열이 먼저 소문자 문자열보다 우선합니다. 그러나 동일한 데이터가 파일에 기록되면 명령을 적용합니다. 종류, 소문자가 있는 문자열이 먼저 옵니다.

그들의 작업의 차이점은 테스트정렬 순서를 결정하기 위해 ASCII 테이블에 따른 문자 배열이 기본으로 사용됩니다. 에 종류또한 국가별 설정 언어 설정에 대해 지정된 정렬 순서를 사용합니다.

빈 값에 대한 문자열 확인

연산자를 사용한 비교 -지그리고 -N변수에 내용이 포함되어 있는지 확인하는 데 사용됩니다. 이렇게하면 bash에서 빈 줄을 찾을 수 있습니다. 예시:

#!/bin/bash
val1=테스트
val2=""
# 문자열이 비어 있는지 확인
if [ -n $val1 ]
그 다음에
echo "문자열 "$val1"이 비어 있지 않습니다"
또 다른
echo "문자열 "$val1"이 비어 있습니다"
파이
# 문자열이 비어 있는지 확인
if [ -z $val2 ]
그 다음에
echo "문자열 "$val2"가 비어 있습니다"
또 다른
echo "문자열 "$val2"가 비어 있지 않습니다"
파이
if [ -z $val3 ]
그 다음에
echo "문자열 "$val3"이 비어 있습니다"
또 다른
echo "문자열 "$val3"이(가) 비어 있지 않습니다"
파이

코드 결과:

이 예에서는 두 개의 문자열 변수를 생성합니다. 발1그리고 발2. 작업 -N변수가 있는지 결정 발1 0이 아닌 길이, -지체크 무늬 발2그리고 val3제로. 후자는 비교 시점까지 정의되지 않았지만 인터프리터는 길이가 여전히 0과 같다고 간주합니다. 다양한 시나리오 검사에서 이 뉘앙스를 고려해야 합니다. 그리고 변수에 어떤 값이 들어 있는지, 설정이 되어 있는지 잘 모르겠다면 연산자를 이용하여 확인해야 합니다. -N또는 -지그런 다음에만 의도된 목적으로 사용하십시오.

기능에주의를 기울일 가치가 있습니다. -N. 선언되지 않았거나 비어 있는 변수가 테스트를 위해 전달되면 false가 아닌 true를 반환합니다. 이러한 경우 검사 중인 문자열(변수)을 큰따옴표로 묶어 다음과 같이 표시해야 합니다.

...
if [ -n "$val1" ]
...

결론

스크립팅 오류를 방지하기 위해 이해할 가치가 있는 Bash 문자열 비교 작업에 대한 특정 뉘앙스가 있습니다. 그러나 실제로는 그러한 상황이 많이 있으므로 모든 것을 기억하는 것(그리고 더 나아가 설명하는 것)은 효과가 없습니다.

BASH 스크립트에 적용된 if-else 조건자주. 조건 자체는 다소 이상한 형태 [[ condition ]]입니다. 들여쓰기에 주의하십시오. 그것들이 없으면 조건이 작동하지 않습니다. 조건 [[ ? ]]:

다음을 수행하는 논리 연산자 목록
if-then-else-fi 구문에 사용

#!/bin/bash if [[ $1 > 2 ]] then # if [[ ? ]] echo $1" 2보다 큼" else # true가 아니면 echo $1" 2 또는 2보다 작음 fi

여러분 중 일부는 항등 연산자 -eq가 이상하다는 것을 알게 될 것입니다. 익숙한 연산자를 사용해보십시오 >

스크립트가 있고 사용자 확인이 필요하다고 가정해 보겠습니다. 사용자가 루트가 아니면 스크립트가 중지됩니다.

#!/bin/bash if [ "$(whoami)" != "루트" ]; then echo "$0 실행 권한이 없습니다." 출구 1; 파이

종종 값에 대한 변수를 확인해야 합니다. 변수에 아무것도 없으면 스크립트를 중지할 수 있습니다.

#!/bin/bash if [ -n "$num" ]; then "변수에 무언가가 있고 다른 프로세스를 시작할 수 있습니다." else echo "빈 변수, 스크립트 중지" exit 0; 파이

변수가 비어 있으면 채울 수 있습니다.

#!/bin/bash if [ -z "$num" ]; then echo "변수가 비어 있습니다" num=1 else echo "num="$num fi

빈 변수에 기본값을 할당할 수 있습니다. 이 항목은 이전 예보다 짧습니다.

#!/bin/bash # 명령줄 인수가 없으면 DEFAULT 쓰기 [ -z "$arg1" ] && arg1=DEFAULT echo $arg1

Bash 쉘 스크립트에서 숫자 비교를 수행할 수 있습니다. Bash에서 숫자 비교 작업을 수행하려면 if 또는 루프 내에서 "test" 상태를 사용해야 합니다. 이 게시물에서는 bash에서 숫자를 비교하는 방법에 대해 설명합니다.

bash 번호 비교를 위한 연산자

운영자그는 무엇을하고 있습니까예시
-eqbash의 숫자가 같은지 비교하고 같으면 0을 반환합니다.if [ $a -eq $b ] 그러면
-게크거나 같으면 bash에서 숫자를 비교합니다. 결과는 크거나 같으면 0을 반환합니다.만약 [ $a -ge $b ] 그러면
-gt보다 크면 bash의 숫자를 비교합니다.if [ $a -gt $b ] 그러면
-르작거나 같으면 bash의 숫자를 비교합니다.만약 [ $a -le $b ] 그러면
-그적으면 bash의 숫자를 비교합니다.if [ $a -lt $b ] 그러면
-네같지 않은 경우 bash의 숫자를 비교합니다.[ $a -ne $b ]이면

Bash의 숫자 비교 연산자에 대한 자세한 예:

1. 운영자-eq

이 연산자는 숫자를 비교하고 값이 같은지 여부를 확인합니다. 같으면 0이 반환됩니다.

# cat test.sh #!/bin/bash echo "변수 값 입력" read a echo "변수 값 입력" read b if [ $a -eq $b ] then echo "반환 값:: $?" echo "a와 b는 같습니다" else echo "반환 값::$?" echo "와 b는 같지 않습니다" fi #

실행:

# sh test.sh 변수 값 입력 2 변수 값 입력 3 반환 값:: 1 a와 b가 같지 않음 # sh test.sh 변수 값 입력 2 변수 값 입력 2 반환 값: 0 a와 b가 같음 #

위의 예에서 우리는 처음으로 숫자 2와 3을 취했고 시스템은 값 1을 반환했지만, a와 b에 대해 동일한 값을 취했을 때 변수는 0을 반환했습니다.

2. 운영자-게

이 연산자는 숫자를 비교하고 크거나 같은 값을 확인합니다. 값이 크거나 같으면 반환 값은 0입니다.

# cat test1.sh #!/bin/bash #diff 프로그램 -ge echo "변수 값 입력" read a echo "변수 b 값 입력" read b if [ $a -ge $b ] then echo "반환 값 : :$?" echo "b보다 크거나 같음" else echo "반환 값::$?" echo "b보다 크거나 같지 않음" fi #

3. 연산자 -gt

이 숫자 비교 연산자는 숫자가 더 큰지 테스트합니다. 값이 더 크면 0을 반환합니다.

# cat test2.sh #!/bin/bash #differ for -gt b=100 echo "100보다 큰 값을 입력하세요." read a if [ $a -gt $b ] then echo "매우 좋음" else echo "별로 좋은 "피

4. 운영자-르

이 숫자 비교 연산자는 보다 작거나 같은 값을 테스트합니다. 작거나 같으면 반환 값은 0입니다.

#diff program for -le b=5 echo "5보다 작거나 같은 값을 입력하세요." read a if [ $a -le $b ] then echo "정확함" else echo "거짓" fi #

5. 운영자-그

이 숫자 비교 연산자는 더 적은 값을 테스트합니다. 숫자가 작으면 반환 값은 0입니다.

Bash에서 문자열을 비교하는 것은 대소문자를 구분하지 않고 두 문자열을 비교하는 작업이 발생할 때까지 문제를 일으키지 않습니다. 나는 내가 스스로 사용하는 문제를 해결하기위한 몇 가지 옵션을 제공 할 것입니다. 이러한 솔루션의 기능은 Bash 셸의 기본 제공 기능만 사용하는 것입니다.

먼저 비교할 문자열을 포함하는 두 개의 변수 str1과 str2를 만듭니다. 다음 코드 예제에서 사용됩니다.

#!/bin/bash str1 = "비교할 문자열" str2 = "비교할 문자열"

내가 제안하고자 하는 대소문자를 구분하지 않는 문자열 비교의 첫 번째 버전은 내장된 shopt 명령과 함께 쉘 옵션의 제어를 사용합니다.

shopt -s nocasematch [[ $str1 == $str2 ]] && echo "일치" || echo "일치하지 않음" shopt -u nocasematch

대소문자를 구분하지 않는 문자열 비교의 다음 버전은 문자열을 일반 대소문자로 자체 캐스팅하는 원칙을 기반으로 합니다. 이 코드 변형은 Bash 버전 4 이상에서 작동합니다. 이전 버전의 Bash에서 사용하면 오류가 발생합니다.

따라서 소문자로 변환된 문자열을 비교하려면 다음 코드를 사용할 수 있습니다.

[[ " $( str1 , ) " == " $( str2 , ) " ]] && echo "일치" || echo "일치하지 않음"

비교된 문자열을 대문자로 변환하려면 다음 코드를 사용하면 됩니다.

[[ " $( str1 ^^ ) " == " $( str2 ^^ ) " ]] && echo "일치" || echo "일치하지 않음"

또는 변수 선언 시 문자열을 강제 변환할 수 있습니다. 이는 선언 셸 내장 명령을 사용하여 수행됩니다.

소문자 텍스트를 포함하는 변수를 선언하려면 다음 코드를 사용하십시오.

#!/bin/bash 선언 -l str = "카멜 케이스 문자열"

이 코드를 실행한 결과 할당되는 문자열이 카멜 케이스로 작성되었음에도 불구하고 str 변수에는 소문자 문자열이 포함됩니다. 변수에 이미 설정된 문자열의 대소문자를 다음과 같이 변경할 수 있습니다.

#!/bin/bash str = "Camel Case String" 선언 -l str str = $str echo $str

문자열을 대문자로 변환하려면 위의 코드 예제에서 -l 스위치 대신 -u 스위치를 사용하여 선언 명령에 대한 호출을 변경해야 합니다.

이제 선언 명령을 사용하여 대소문자를 구분하지 않는 문자열 비교를 다음과 같이 수행할 수 있습니다.

선언 -l str1_l = $str1 선언 -l str2_l = $str2 [[ $str1_l == $str2_l ]] && echo "일치" || echo "일치하지 않음"

이러한 대소문자를 구분하지 않는 문자열 비교는 Bash 스크립팅에서 사용할 수 있습니다. 따라서 Bash 버전 4 이상을 사용하는 경우 가장 마음에 드는 것을 선택할 수 있습니다. Bash 버전이 4 미만인 경우 첫 번째 옵션을 사용해야 하며 shopt 셸 내장을 사용하여 nocasematch 옵션을 지정합니다.

이 주제는 bash 셸 언어 시리즈의 네 번째 주제입니다. 그는 조건문과 같은 언어의 제어 구조에 대해 이야기할 것입니다. 그러나 설명을 진행하기 전에 아래 자료를 더 잘 이해할 수 있도록 몇 가지 뉘앙스를 고려해야 합니다.
먼저 명령 목록이 무엇인지 살펴보겠습니다. 명령 목록은 세미콜론으로 끝나는 ";", "&&", "||" 연산자 중 하나로 구분된 단일 명령, 파이프라인 또는 명령/파이프라인 시퀀스입니다.
; - 여러 명령을 순차적으로 실행하는 연산자. 각 후속 명령은 이전 명령이 완료된 후에만 실행을 시작합니다(성공 여부에 관계없이).
&& - 이전 명령을 성공적으로 실행한 후에만 명령 실행 연산자입니다.
|| - 이전 명령을 잘못 실행한 후에만 명령을 실행하기 위한 명령문.
성공 코드는 0이고 오류 코드는 0이 아닙니다(오류 유형에 따라 다름). 1이 참이고 0이 거짓일 때 일반적인 프로그래밍 언어와 혼동하지 마십시오.
이제 조건문에 대한 직접적인 고려를 진행할 수 있습니다.

대소문자 연산자

case 문의 일반 구문은 다음과 같습니다.

케이스 값
템플릿1) 목록1;
패턴2 | 템플릿3) 목록2;
이삭

case 문의 논리적 실행 순서:
a) 값과 일치하는 첫 번째 패턴이 검색됩니다.
b) 발견되면 해당 명령 목록이 실행되고 ";;"로 종료됩니다.
c) 케이스 구성에 따라 제어가 운영자에게 이전됩니다.
패턴과 목록은 ")" 문자로 구분됩니다. 여러 조건이 하나의 명령 목록에 해당할 수 있으며 이 경우 "|" 기호로 구분해야 합니다.
템플릿에서는 주기의 두 번째 주제에서 설명한 "*", "?", "" 문자를 사용할 수 있습니다. 그들의 도움으로 C, PHP와 같은 언어의 switch 문에서 기본값으로 작동하는 명령을 구현할 수 있습니다.
사용 사례를 보여 드리겠습니다.
echo -n "[유니버설 뷰어] 파일 이름 지정: "; *.jpg|*.gif|*.png에서 파일 케이스 "$File" 읽기) eog $File ;; *.pdf) evince $File ;; *.txt) $File ;; *.html) 파이어폭스 $파일 ;; /dev/*) echo "음, 무서운 파일입니다." ;; *) echo "알았어, 알았어 - 그렇게 다재다능하지 않아." echo "이 파일 형식에 익숙하지 않습니다. 어떻게 보는지 모르겠습니다." ;; 이삭
case 구문을 사용하는 또 다른 예:
echo "오류. 누구에게 메시지를 보내야 하나요?" echo "상사에게: b" echo "동료에게: c" echo "아무에게도: 아무 키나" 답변 사례 읽기 $answer in b|B) mail –s "오류 로그" boss< error.log;; c|C) mail –s "Help! error log" –c denis nick < error.log;; *) echo "error"; exit;; esac

조건부 if 문

if 문의 일반 구문은 다음과 같습니다.

목록 1이면
목록2

파이

여기에서 대괄호는 선택적 구성을 나타냅니다. case 문의 논리적 실행 순서:
a) list1이 실행됩니다.
b) 오류 없이 실행되면 list2가 실행됩니다. 그렇지 않으면 list3이 실행되고, 오류 없이 완료되면 list4가 실행됩니다. list3도 오류 코드를 반환하면 list5가 실행됩니다.
c) 제어는 if 구문 다음에 오는 연산자로 이전됩니다.
다음과 같은 경우를 사용하는 예를 보여 드리겠습니다.
if grep -q Bash file then echo "파일에 Bash 단어가 하나 이상 포함되어 있습니다." 파이
if와 then이 같은 줄에 있는 경우 if 및 then 구문은 세미콜론으로 끝나야 합니다. 예를 들어:
$if[$? -ne0]; 그런 다음 echo "오류"; 파이
이제 if와 then을 같은 줄에 넣을 수 있다는 것을 알고 위의 예를 다시 작성해 보겠습니다.
if grep -q Bash 파일; then echo "파일에 Bash라는 단어가 포함되어 있습니다." 파이

테스트 문 및 조건식

위의 예에서는 종료 코드를 구문 분석하는 대신 조건 검사를 사용합니다. 이러한 테스트의 두 가지 형식은 동일합니다. 테스트 내장 명령과 [조건]입니다. 예를 들어 파일이 존재하는지 확인하려면 다음과 같이 작성합니다.
테스트 -e<файл>
또는
[-이자형<файл> ]
대괄호를 사용하는 경우 "["는 명령의 이름이고 "]"는 명령을 종료하는 데 필요한 마지막 인수이므로 공백으로 서로 구분해야 합니다.
조건이 성공적으로 확인되면 0이 반환되고 거짓이면 오류 코드는 1입니다.
테스트 명령은 문자열이 비어 있는지 확인할 수 있습니다. 비어 있지 않은 문자열은 종료 코드 0이 됩니다. 각각 비어 있음 - 1입니다. 예:
$ 테스트 $USER; 에코 $? 0
구성 ""은 ""보다 더 다양합니다. 이 테스트 명령의 확장 버전입니다. 이 구성 내에서 파일 이름에 대한 추가 해석이 수행되지 않고 인수를 별도의 단어로 분할하지도 않지만 매개변수와 명령의 대체는 허용됩니다. 예를 들어:
file=/etc/passwd if [[ -e $file ]] then echo "암호 파일을 찾았습니다." 파이
"" 구성은 일부 논리적 오류를 방지하는 데 도움이 되기 때문에 ""보다 더 선호됩니다. 예를 들어 연산자 "&&", "||", "<" и ">" 내부 ""는 완벽하게 유효하지만 내부 ""는 오류 메시지를 생성합니다.
"(())" 구성을 사용하면 내부의 산술 표현식을 계산할 수 있습니다. 계산 결과가 0이면 오류 코드가 반환됩니다. 계산의 0이 아닌 결과는 반환 코드 0을 제공합니다. 즉, 위에서 설명한 테스트 및 "" 명령어의 정반대입니다.
if 문은 중첩 검사를 허용합니다.
if echo "다음 *if*는 첫 번째 *if* 안에 있습니다." if [[ $comparison = "integer" ]] then ((a< b)) else [[ $a < $b ]] fi then echo "$a меньше $b" fi

조건식은 일반적인 논리 연산을 사용하여 결합할 수 있습니다.
! <выражение>- 거부;
<выражение1>-ㅏ<выражение2>- 논리적 AND;
<выражение1>-영형<выражение2>- 논리적 OR.

파일에 대한 기본 조건식:
-e - 파일이 존재합니다.
-f - 일반 파일(디렉토리 또는 장치 파일이 아님);
-s - 0이 아닌 파일 크기;
-d - 파일이 디렉토리입니다.
-b - 파일이 블록 장치(플로피, cdrom 등)입니다.
-c - 파일이 문자 장치(키보드, 모뎀, 사운드 카드 등)입니다.
-p - 파일이 파이프입니다.
-h - 파일이 심볼릭 링크입니다.
-L - 파일이 심볼릭 링크입니다.
-S - 파일이 소켓입니다.
-t - 파일이 터미널 장치와 연결됩니다.
-r - 파일을 읽을 수 있습니다(스크립트를 시작한 사용자가).
-w - 파일이 쓰기 가능합니다(스크립트를 실행한 사용자에게).
-x - 파일을 실행할 수 있습니다(스크립트를 시작한 사용자에게).
-g - 파일 또는 디렉토리에 대한 (sgid) 플래그가 설정됩니다.
-u - (suid) 파일에 대한 플래그가 설정됩니다.
-k - 스티키 비트 플래그가 설정됩니다.
-O - ​​당신은 파일의 소유자입니다.
-G - 파일과 같은 그룹에 속해 있습니다.
-N - 마지막으로 읽은 이후에 파일이 수정되었습니다.
file1 -nt file2 – file1이 file2보다 최신입니다.
file1 -ot file2 – file1이 file2보다 오래되었습니다.
file1 -ef file2 - file1 및 file2는 동일한 파일에 대한 하드 링크입니다.

문자열 비교를 위한 기본 조건식:
-z string – 문자열 길이는 0입니다.
-n string – 문자열 길이가 0이 아닙니다.
string1 == string2 – 문자열 일치(“=”와 유사);
line1 !== line2 – 줄이 일치하지 않습니다("!="와 유사).
1행< строка2 – строка1 предшествует строке2 в лексикографическом порядке;
line1 > line2 - line1은 사전순으로 line2를 따릅니다.
산술 조건식의 형식은 다음과 같습니다.
인수1 연산 인수2 여기서 인수는 정수이고 다음 연산이 허용됩니다.
-eq - 같음;
-ne - 같지 않음;
-lt - 덜;
-le - 작거나 같음
-gt - 더;
-ge - 크거나 같음
< - меньше (внутри двойных круглых скобок);
<= - меньше или равно (внутри двойных круглых скобок);
> - 보다 큼(이중 괄호 안)
>= - 크거나 같음(이중 괄호 안).

if 문을 사용하여 이전 예제를 다시 작성해 보겠습니다.
echo "오류. 누구에게 메시지를 보내야 하나요?" echo "상사에게: b" echo "동료에게: c" echo "아무에게도: 아무 키나" 읽기 답변 if [ "$answer" == "b" –o "$answer" == "B" ]; 그런 다음 메일 -s "오류 로그"보스< error.log; elif [ "$answer" == "c" –o "$answer" == "C" ]; then mail –s "Help! error log" –c denis nick < error.log; else echo "error"; exit; fi

다음 주제에서는 계속해서 bash 셸의 제어 구조를 고려할 것입니다. 즉, 루프 연산자가 고려됩니다. 그리고 지금 나는 의견과 비판을 기다리고 있습니다 :).

UPD: 사용자 덕분에