본문 바로가기
{Programing}/Server

리눅스 쉘 스크립트

by 탱타로케이 2017. 10. 23.

1. 개요


확장자 .sh 로 끝나는 파일


쉘을 통해 프로그램을 만든 것으로 윈도우나 도스의 batch 파일과 비슷하지만 좀더 강력한 기능들을 가짐.


파일 내용의 시작을 #! 로 작성해야함.


기본 약속으로 #! 은 본 쉘인 #! /bin/sh 로 인식됨.


배쉬 쉘을 이용하고자 하면 #! /bin/bash 로 작성하면 됨.



2. 쉘 스크립트의 실행


스크립트의 실행권한을 확인한뒤  (ls -al : 현재 디렉토리의 파일들의 자세한 정보를 보여주는 명령어)


실행권한이 없으면 chmod -x 파일명 명령어를 통해 실행권한을 부여하고 


./파일명.sh 로 실행하면 된다.



3. 변수

쉘 스크립트의 변수는 기본적으로 문자열로 인식된다.


숫자로 사용하고싶다면 `expr 변수` 으로 쓰면 된다. 


양 끝을 `(숫자 1키 왼쪽)로 감싸주는 것이 포인트.


expr 와 변수, 연산자 사이에는 무조건 공백 1개씩을 두어야 한다.


변수의 선언은 변수명=값 으로 선언하고 공백을 주면 안된다.


변수를 쓰고싶다면 $변수명 으로 사용하면 된다.



4. 명령줄 인수.


총 9개의 명령줄 인수를 사용할수 있고 


$0~$9 로 사용한다.


$0 는 함수명,파일명 이고


$1~$9 는 순서에 맞는 인수 값이다.



5. 입-출력


입력 : read 변수명.


출력 : echo 변수명. 변수명 앞에 -n을 써주면 줄넘김을 하지 않는다. 


출력에는 C언어의 printf 를 사용할수도 있지만 소괄호 () 가 생략된다.



6. 연산자 


기본연산자는 기본적으로 C와 같다.


+ : 더하기

- : 빼기

* : 곱하기

/ : 나누기

% : 나머지


괄호와 곱하기 앞에는 항상 \(역 슬래쉬)를 붙여줄것.



7. 조건문

if로 시작. fi 로 끝.


if[조건]

then

elif[조건]

then

else

fi


의 형식으로 사용한다.


8. 비교


숫자


$A -gt $B : A가 B보다 큼 

$A -lt $B : A가 B보다 작음

$A -ge $B : A가 B보다 크거나 같음.

$A -le $B : A가 B보다 작거나 같음.

$A -eq $B : A와 B가 같음.

$A -ne $B : A와 B가 다름.


문자


"str1" = "str2" :  문자열이 같다. ==도 가능.

"str1" ! "str2" : 문자열이 다르다.

-z "str" : 문자열 길이가 0인경우 참.

-n "str" : 문자열의 길이가 0이 아닌경우 참.


관계 연산자


-a : and

-o : or


9. 반복문


for 문


in 뒤에 오는 변수들을 순차적으로 변수에 대입하면서 반복문을 실행한다.

변수들의 개수 만큼 do 이하의 문장을 실행.

마지막으로 done을 실행하며 종료함.


for 변수명 in 변수들

do


done



while 문


조건문이 참인 경우에 do done 사이를 실행한다.


:와 1은 항상 참.

break문과 continue문을 사용할 수 있다.


while [조건문]

do


done



until 문

while 문과 거의 같은 기능.

단 조건이 거짓일때 루프를 돈다.


until [조건]

do


done



case 문


입력된 변수의 패턴에 일치하는 부분만 실행됨.

각 패턴에 ) 로 구분하고

*) 는 설정한 패턴 이외의 모든 상황을 커버하는 예외문.

esac로 끝.



case 변수 in

패턴1)

문장

끝 ;;

패턴2)

문장

끝;;

*)

문장

끝;;

esac



10.함수


본문 시작전에 모든 함수는 선언및 정의를 해야한다.

기존의 프로그래밍처럼 선언후 메인 정의는 사용할 수 없다. 


'{Programing} > Server' 카테고리의 다른 글

mysql 문제 발생.  (0) 2017.11.06
리눅스 쉘 스크립트 예제 분석  (0) 2017.10.23
(리눅스) - make 관련  (0) 2017.10.09
1. TCP 기본  (0) 2017.03.02
정리계획  (0) 2017.02.18

댓글