[RHEL6] 쉘 명령어 1탄(#!, break, case, dirs, enable)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 쉘 명령어 1탄(#!, break, case, dirs, enable)

by 찬찬이 아빠 2020. 2. 14.
반응형
  1. #!(쉘 선언)

 1) 요약 : 어떤 쉘로 동작할지를 지정

 2) 사용 방법 : #![쉘의 절대경로]

 3) 추가 설명

스크립트의 첫 번째 줄 부분에 사용되어 스크립트가 어떤 쉘에서 동작할지를 지정합니다. 물론 유닉스, 리눅스의 쉘 프로그램밍은 어느 쉘을 사용하더라도 기본적으로 비슷하게 작성할 수 있지만, 세부적인 부분에서 달라지는 점이 있기 때문에 정확하게 쉘을 지정해주어야 합니다. /bin/sh로 지정할 경우에는 시스템에서 기본적으로 링크로 지정한 기본 쉘을 사용할 수 있습니다.

 

아래는 사용할 수 있는 각 쉘에 대한 설명입니다.

사용 방법 설명
#!/bin/bash bash 쉘로 동작
#!/bin/tcsh tc 쉘로 동작
#!/bin/sh 대개의 경우 시스템 기본 쉘로 동작
#!/bin/csh c쉘로 동작

 

 

 

  2. break(정지)

 1) 요약 : 루프를 빠져 나감

 2) 사용 방법 : break [n]

 3) 추가 설명

break는 쉘 스크립트 문법에서 for, while, until 등의 루프 제어문을 빠져나가는데 쓰입니다.

 

다음은 while 문으로 이루어진 루프문을 보여주는 예제입니다. break를 사용하지 않을 경우 변수 j가 1부터 3까지 출력되며 break를 사용하는 경우 1을 출력하고 다시 while로 돌아가 변수를 조건과 비교하지 않고 바로 루프를 빠져나가게 됩니다.

 

<break 스크립트(파일명 : breakscript)>

스크립트 설명
#!/bin/bash bash 쉘로 스크립트가 실행
j="0" 변수 j를 0으로 선언
while [ "$j" != "3" ] while loop로 변수 j가 3이 아니면(!=) 참

do

let "j+=1"

ehco "$j"

# break 1

while 문이 참일 경우 do를 실행

break가 없는 경우도 테스트하기 위해 앞에 주석(#) 처리한 후 실행

"#"을 삭제하여 break를 넣고 테스트

done

변수 j가 3일 경우 done 아래를 실행

echo "스크립트 종료"

echo "스크립트 종료"

 

 

<break를 사용하지 않은 경우>

주석(#) 처리된 "#break 1"은 break를 수행하지 않아 다음과 같은 결과가 출력됩니다.

# ./breakscript
1
2
3
스크립트 종료

 

<break를 사용한 경우>

만일 주석을 해제하여 "break 1"이 실행되면 다음과 같은 결과가 출력됩니다.

# ./breakscript
1
스크립트 종료

 

 

  3. case(다중분기문)

 1) 요약 : 케이스 조건을 검사

 2) 사용 방법

 case 문자열

 in

 비교 문자열

 command

 esac

 

 3) 추가 설명

case는 문자열을 비교하여 문자열과 같은 문자열의 아래에 있는 명령어를 실행합니다.

스크립트 설명
#!/bin/bash bash 쉘로 스크립트 실행
case

$1 을 문자열로 받아 비교

$1은 이 스크립트를 실행할 때 받아 오는 첫 번째 인수를 뜻함

예를 들어 # ./casescript case 1로 실행하면 cse1을 $1로 받아오게 됨

case1)

   echo "case1 - 외로워도 슬퍼도"

;;

case2)

   echo "case2 - 나는 안울어!"

;;

*)

   echo " 잘못 고르셨어요"

;;

$1이 받아온 문자열과 비교하여 같은 문자열이 있는 곳에 명령어를 실행

esac

case를 종료

 

 

<스크립트 실행>

다음과 같이 스크립트를 실행합니다.

# ./casescript 문자열

 

결과는 다음과 같습니다.

# ./casescript case1
case1 - 외로워도 슬퍼도
# ./casescript case2
case2 - 나는 안울어!
# ./casescript case3
잘못 고르셨어요
# ./casescript
잘못 고르셨어요

 

 

  4. dirs(기억 디렉터리 보기)

 1) 요약 : 현재 기억하고 있는 디렉터리를 출력

                pushd/popd 연산과 관련이 있음

 2) 사용 방법 : dir [옵션]

 3) 옵션

 +entry : 디렉터리 목록의 시작부터 entry 번째의 목록을 출력(시작은 0)

 -entry : 디렉터리 목록의 끝부터 entry 번째의 목록을 출력

 -l : 긴 목록을 출력

 

 4) 추가 설명

pushd를 이용하여 디렉터리를 기억합니다. popd로 기억된 디렉터리로 이동하는데 이제까지 이동했던 디렉터리 목록을 보고 싶을 때 사용합니다. 옵션을 이용하여 시작에서부터 몇 번째라고 지정하면 그 위치에 기억된 디렉터리를 출력합니다.

 

<push를 이용한 디렉터리 저장>

# push /tmp
# push /home/chan
# push /root

 

 

<마지막 두 번째 기억된 디렉터리 보여주기>

아래와 같이 '-1'을 사용하여 끝에서 두 번째 저장 내용을 출력할 수 있습니다.

# dirs -1
/home/chan

 

 

  5. enable(내부 명령어 사용허가 설정)

 1) 경로 : shell 내부 명령어

 2) 요약 : 내부 명령어 이름의 사용 허가와 불가를 설정

 3) 사용 방법 : enable [옵션[ 이름

 4) 옵션

 -a : 모든 내부 명령어를 출력

 -n : 해당 이름을 내부 명령어로 사용할 수 없도록 설정. 이름을 지정하지 않으면 현재 막아 놓은 명령어 목록을 출력

 -f filename : 해당 파일을 내부 명령어에 등록

 

 5) 추가 설명

enable를 이용하면 내부 명령어의 사용을 허가하거나 사용하지 못하도록 설정할 수 있습니다.

 

kill이라는 내부 명령어 이름을 더 이상 사용할 수 없게 설정해 봅니다.

# enable -n kill
# enable -n
enable -n kill

 

다시 kill을 내부 명령어로 사용할 수있게 하고 등록이 잘 되었는지 확인해 봅니다.

# enable kill kill
# enable | grep -i kill
enable kill
반응형

댓글