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

5 Bash 사례 설명 예시

5 Bash 사례 설명 예시Bash 셸 case 문은 C의 switch 문과 유사합니다. 정수 및 문자.

Case 문은 루프가 아니며 n번의 코드 블록을 실행하지 않습니다. 대신 bash 셸이 조건을 확인하고 프로그램의 흐름을 제어합니다.

이 기사에서는 5가지 실제 예제와 함께 bash case 명령을 검토해 보겠습니다.

bash 셸의 대소문자 구성을 사용하면 와일드카드 문자를 포함할 수 있는 패턴에 대해 문자열을 테스트할 수 있습니다. Bash case 문은 bash if-then-else 문의 가장 간단한 형태입니다.

bash case 문의 구문입니다.

case expression in
 pattern1 )
 statements ;;
 pattern2 )
 statements ;;
 ...
esac

다음은 bash case 문의 요점입니다.

  • Case 문은 먼저 표현식을 확장하고 각 패턴과 일치시키려고 합니다.
  • 일치하는 항목이 발견되면 이중 세미콜론(;;)이 실행될 때까지 연결된 모든 명령문이 실행됩니다.
  • 첫 번째 일치 후 케이스는 마지막으로 실행된 명령의 종료 상태로 종료됩니다.
  • 일치하는 항목이 없으면 케이스의 종료 상태는 0입니다.

Bash 사례 1. 프로세스에 신호 보내기

다음 스크립트는 신호 번호와 프로세스 ID를 인수로 받아들이고 신호 이름을 사용하여 주어진 프로세스 ID에 신호를 보냅니다.

<센터>

이 스크립트는 case 문의 사용법을 보여주기 위한 것입니다.

$ cat signal.sh
#!/bin/bash

if [ $# -lt 2 ]
then
 echo "Usage : $0 Signalnumber PID"
 exit
fi

case "$1" in

1) echo "Sending SIGHUP signal"
 kill -SIGHUP $2
 ;;
2) echo "Sending SIGINT signal"
 kill -SIGINT $2
 ;;
3) echo "Sending SIGQUIT signal"
 kill -SIGQUIT $2
 ;;
9) echo "Sending SIGKILL signal"
 kill -SIGKILL $2
 ;;
*) echo "Signal number $1 is not processed"
 ;;
esac

위의 예에서:

  • $1 및 $2는 각각 신호 번호와 프로세스 ID입니다.
  • kill 명령어를 사용하여 해당 시그널을 주어진 프로세스 id로 보냅니다.
  • 몇 초 동안 sleep 명령을 실행합니다.
  • 선택적 마지막 비교 *)는 기본 케이스이며 모든 항목과 일치합니다.

위의 쉘 스크립트 사용법:sleep 명령의 프로세스 id를 찾아 해당 프로세스 id에 kill 신호를 보내 프로세스를 종료합니다.

$ sleep 1000

$ ps -a | grep sleep
23277 pts/2 00:00:00 sleep

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

또한 이전 종료 기사인 프로세스를 종료하는 4가지 방법을 참조하십시오.

Bash 사례 예. 2. 파일의 패턴 일치

이 예제는 줄 수, 단어 수를 출력하고 주어진 패턴과 일치하는 줄을 삭제합니다.

$ cat fileop.sh
#!/bin/bash

# Check 3 arguments are given #
if [ $# -lt 3 ]
then
 echo "Usage : $0 option pattern filename"
 exit
fi

# Check the given file is exist #
if [ ! -f $3 ]
then
 echo "Filename given \"$3\" doesn't exist"
 exit
fi

case "$1" in

# Count number of lines matches
-i) echo "Number of lines matches with the pattern $2 :"
 grep -c -i $2 $3
 ;;
# Count number of words matches
-c) echo "Number of words matches with the pattern $2 :"
 grep -o -i $2 $3 | wc -l
 ;;
# print all the matched lines
-p) echo "Lines matches with the pattern $2 :"
 grep -i $2 $3
 ;;
# Delete all the lines matches with the pattern
-d) echo "After deleting the lines matches with the pattern $2 :"
 sed -n "/$2/!p" $3
 ;;
*) echo "Invalid option"
 ;;
esac

위의 스크립트를 실행하면 아래와 같습니다.

$ cat text
Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer.
The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code.
Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms.
It is the most popular editor amongst Linux Journal readers.

Bash 케이스 정규식 출력. Vim 패턴과 일치하는 라인을 삭제한 후:

$ ./fileop.sh -d Vim text
It is the most popular editor amongst Linux Journal readers.

또한 Bash ~ 확장 및 { } 확장에 대한 이전 기사를 참조하십시오.

Bash 사례 예제 3. 확장자에서 파일 유형 찾기

이 예제는 파일 이름의 확장자를 기반으로 파일의 유형(텍스트, Csource 등)을 출력합니다.

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
 # Take extension available in a filename
 ext=${filename##*\.}
 case "$ext" in
 c) echo "$filename : C source file"
 ;;
 o) echo "$filename : Object file"
 ;;
 sh) echo "$filename : Shell script"
 ;;
 txt) echo "$filename : Text file"
 ;;
 *) echo " $filename : Not processed"
 ;;
esac
done

$ ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file

Bash 사례 4. 예 또는 아니오로 사용자에게 프롬프트 표시

대부분의 소프트웨어 설치에서 라이센스 계약 중에 사용자의 입력에 예 또는 아니오를 묻습니다. 다음 코드 스니펫은 사용자로부터 예 또는 아니오 입력을 받는 방법 중 하나입니다.

$ cat yorno.sh
#!/bin/bash

echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

 [yY] | [yY][Ee][Ss] )
 echo "Agreed"
 ;;

 [nN] | [n|N][O|o] )
 echo "Not agreed, you can't proceed the installation";
 exit 1
 ;;
 *) echo "Invalid input"
 ;;
esac

$ ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed

파이프 문자로 구분된 여러 패턴이 있는 경우 표현식은 연관된 명령문을 실행하기 위해 패턴 중 하나와 일치할 수 있습니다. 일치하는 항목을 찾을 때까지 패턴을 순서대로 확인합니다. 아무것도 발견되지 않으면 아무 일도 일어나지 않습니다.

또한 이전 15개의 bash 배열 예제 문서를 참조하십시오.

Bash 사례 5. 시작 스크립트

/etc/init.d 디렉토리의 시작 스크립트는 case 문을 사용하여 애플리케이션을 시작 및 중지합니다.

모든 종류의 패턴을 사용할 수 있지만 기본 값을 테스트할 때는 항상 case 문을 사용하는 것이 좋습니다. (즉, 정수 또는 문자).

$ cat startpcapp
#!/bin/bash

case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac

$ ./startpcapp start
Starting application
/usr/bin/startpc started

권장 도서

5 Bash 사례 설명 예시Bash 101 해킹, Ramesh Natarajan 작성 . 저는 대부분의 시간을 Linux 환경에서 보냅니다. 그래서 당연히 저는 Bash 명령줄과 셸 스크립팅의 열렬한 팬입니다. 15년 전, *nix의 다양한 버전을 작업할 때 C 셸과 Korn 셸에서 많은 코드를 작성했습니다. 나중에 시스템 관리자로 Linux 작업을 시작했을 때 Bash 셸 스크립팅을 사용하여 가능한 모든 작업을 거의 자동화했습니다. 내 Bash 경험을 바탕으로 Bash 명령줄과 셸 스크립팅 모두에 대한 101개의 실용적인 예제가 포함된 Bash 101 Hacks eBook을 작성했습니다. Bash를 마스터할 생각을 했다면 Bash 명령줄과 셸 스크립팅을 제어하는 ​​데 도움이 될 이 책을 읽어보세요.