본문 바로가기
컴퓨터 활용/리눅스 활용

[쉘 스크립트] 기본적인 쉘 스크립트 모음

by 호군 2011. 10. 26.
반응형

wkf원문 : http://cafe.naver.com/seokiya.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=126

카페라서 가입을 해야하는군요.


1. /etc/profile - 콘 쉘이 로그인 쉘로 지정된 모든 사용자가 로그인할 때마다 이 파일을 읽는다.

2. $HOME/.profile - 콘 쉘이 로그인 쉘로 지정된 사용자가 로그인할 때마다 홈 디렉토리에 파일이 있으면 읽는다.

3. $HOME/.kshrc - 콘 쉘이 로그인 쉘로 지정된 사용자가 로그인할 때마다 $HOME/.profile파일에서 따로 설정이

                            되어 있으면 추가로 읽는 파일이다.


#쉘 스크립트
 - 쉘에 의해 실행되는 명령을 포함한 텍스트 파일
 - 쉘 스크립트의 첫 라인은 어느 쉘이 실행하는지 표기한다
  #!/bin/sh



#쉘 구문
 - 단일 따옴표(')
  - 쉘에서 제공하는 가장 제한된 형태의 인용법. 단일 따옴표로 둘러싸인 텍스트는 쉘에 의해 무시된다.
 - 이중 따옴표(")
  - 이중 따옴표로 둘러싸인 텍스트는 쉘에서 인용된 텍스트 내 대부분의 특수 문자를 무시한다.
  - 변수를 참조할 때는 보통 큰 따옴표(" ")로 묶어 주는게 좋습니다
 - 역 따옴표(`)를 이용한 명령 치환  
 
 - 제어 흐름문
  - if 문
   - if 문은 항상 fi 문으로 종료한다.
#특수 문자
 - #
  - 주석
 - `
  - 명령어 치환
  -`명령어`라고 하면 명령어의 결과를 변수값으로 설정할 수 있음.
  -다른말로 backticks나 역쿼우트(backquote)라고도 함.
 - $
  - 변수 치환(변수의 값을 참조하는 것)
 - |
  - 파이프. 여러 명령어들을 연결하는 방법으로써, 한 명령어의 출력을 다음 명령어나 쉘에게 전달.
 - &
  - 작업을 백그라운드로 돌리기. 명령어 뒤에 &를 붙여 주면 백그라운드로 실행됩니다.
 - {}
  - 코드 블럭. [중괄호] "인라인 그룹"이라고도 부르는 중괄호 한 쌍은 실제로 익명의 함수를 만들어 냅니다만
  보통의 함수와는 달리 코드 블럭 안의 변수들을 스크립트의 다른 곳에서 볼 수가 있다.
  - 중괄호로 묶인 코드 블럭은 I/O 재지향되거나 재지향을 받을 수 있다.




 

$0 - 쉘 스크립트의 이름

$1 - $9 - 첫 번째 아규먼트,두 번째 아규먼트, ... , 아홉번 째 아규먼트

${10} - ${n} - 열 번째 아규먼트, 열한 번째 아규먼트, ... ,n번째 아규먼트

$# - 아규먼트의 개수

$@ - 쉘 스크립트에 입력된 모든 아규먼트

$* - 쉘 스크립트에 입력된 모든 아규먼트

 

조건문

본쉘                                  콘쉘                                              의미

[-r file_name]          [[-r file_name]]           file_name의 내용을 읽을 수 있는지 검사

[-w file_name]        [[-w file_name]]          file_name의 내용을 변경할 수 있는지 검사

[-x file_name]         [[-x file_name]]           file_name을 실행할 수 있는지 검사

불가능                    [[-O file_name]]          file_name의 소유주가 스크립트를 실행하는 사람인지 검사(Owner)

불가능                    [[-G file_name]]          file_name의 그룹 소유주가 스크립트를 실행하는 사람이 속한 그룹인지 검사

[-f file_name]          [[-f file_name]]           file_name이 일반적인 파일인지 검사

[-d file_name]         [[-d file_name]]          file_name이 디렉토리인지 검사

[-c file_name]         [[-c file_name]]          file_name이 캐릭터 디바이스 파일인지 검사

[-b file_name]         [[-b file_name]]          file_name이 블록 디바이스 파일인지 검사

불가능                    [[-L file_name]]          file_name이 심볼릭 링크인지 검사

[-s file_name]         [[-s file_name]]          file_name의 크기가 0보다 큰 값인지 검사

불가능                    [[-e file_name]]          file_name이 존재하는지 검사(Exist)

 

본쉘                                       콘쉘                                               의미

[$num1 -eq $num2]        ((num1 == num2))         num1과 num2가 같은 값인지 검사(equal)

[$num1 -ne $num2]        ((num1 != num2))          num1과 num2가 다른 값인지 검사(not equal)

[$num1 -lt $num2]          ((num1 < num2))          num1이 num2보다 작은 값인지 검사(Less than)

[$num1 -gt $num2]         ((num1 > num2))          num1이 num2보다 큰 값인지 검사(greater than)

[$num1 -le $num2]         ((num1 <= num2))         num1이 num2보다 작거나 같은 값인지 검사(less than or equal)

[$num1 -ge $num2]        ((num1 >= num2))         num1이 num2보다 크거나 같은 값인지 검사(greater than or equal)

 

본쉘                               콘쉘                                   의미

[str1 = str2]             [[str1 == str2]]                 str1과 str2가 같은 값인지 검사

[str1 != str2]            [[str1 != str2]]                  str1과 str2가 다른 값인지 검사

불가능                    [[str1 == pattern]]             str1이 pattern으로 표현할 수 있는지 검사

불가능                    [[str1 != pattern]]              str1이 pattern으로 표현할수 없는지 검사

[str1 < str2]            [[str1 < str2]]                   str1과 str2를 사전 순으로 비교하여 str1이 앞서 있는지 검사

[str1 > str2]            [[str1 > str2]]                   str1과 str2를 사전 순으로 비교하여 str2가 앞서 있는지 검사

[-z str2]                 [[-z str2]]                        str1의 길이가 0인지 검사

[-n str2]                 [[-n str2]]                        str1의 길이가 1이상인지 검사

 

본쉘              콘쉘                                        의미

-o                 ||                     양쪽 조건 중 어느 하나만 만족하면 모든 조건이 만족

-a                 &&                    양쪽 조건 모두 다를 만족하면 모든 조건이 만족

!                                           조건이 결과 값을 반대로 바꿈

 

 

if문 - 조건의 진리 값이 참인 경우와 거짓인 경우로 나누어서 어느 부분을 선택하여 실행할 것인지를 결정                           

if 조건문                                          if 조건문                                      if 조건문

then                                                then                                           then

    명령어들              ->                           명령어            ->                       명령어

fi                                                    else                                           elif 조건문

                                                            명령어                                  then

                                                      fi                                                     명령어

                                                                                                       else

                                                                                                           명령어

                                                                                                        fi

Case문 : if문의 또다른 형태

case value in

pattern1|pattern2)

        명령어

         ;;

pattern3|pattern4)

        명령어

         ;;

pattern5|pattern6)

         명령어

         ;;

*)

         명령어

         ;;

esac

 

for문 : 미리 정해진 횟수를 반복할 때 사용

for var in list_of_value

do

      명령어

done

 

while문 : 조건을 만족하는 동안 반복하는데 사용

while 조건문

do

    명령어

done

 

until문 : 조건이 만족되지 않은 동안에만 반복한다.

until 조건문

do

    명령어들

done

 

select문 : 메뉴를 만들고 사용자가 메뉴에서 선택한 값에 따라서 명령어를 실행할 때 사용

select var in list_of_value

do

   명령어들

done



 

반응형