728x90
반응형

예전부터 관심음 있었지만 딱히 배울 필요성을 못느꼈던 쉘 스크립트를 공부해보았다.
어느정도 문법은 C와 다르지 않을 것이라는 전제에서 시작하였으므로 C와 다른 점을 기본으로 정리해보고자 한다.

1. 문장 첫 라인
문장 첫라인은 항상 #!/bin/bash 로 시작한다. 다른 타입의 쉘스크립트 언어였다만 좀 달라지겠지만 일단 bash만 언급하겠다. (참고로 #은 주석)

2. 변수
변수는 A=1 이런 식으로 선언하고 부를 때 $A 라는 식으로 부른다.
($는 PHP만 쓰는 게 아니었다.ㅋㅋ 돈을 밝히는 건지 ㅋㅋ)
주의 : = 양쪽에 띄어쓰기를 하면 절대 안된다. 난 띄어쓰는 습관이 들어져서 첨에 상당히 짜증났다.

3. 입출력
화면 출력은 echo를 사용하고 기본적으로 newline이 적용된다. -n 옵션을 주면 newline이 적용되지 않는다.
입력은 read 변수 를 사용한다.

4. 실행
sh 파일명 혹은 ./파일명을 사용한다. 그러나 ./파일명을 사용할 때는 권한을 잘 살펴보길 바란다.

5. Argument
쉘스크립트의 가장 강점이 아닐까. $1, $2... 이런 식으로 변수에 들어간다. $# 하면 argument의 개수

6. 크기 비교
조건식에 -gt, -lt, -ge, -le, -eq, -ne 라는 옵션을 사용한다. greater than 이런 것들의 약자이다.

7. 숫자 계산
쉘스크립트에서 가장 짜증 나는 점. expr이라는 문법을 사용해야 한다.
num=`expr \( 3 \* 5 \) / 4 + 7`
숫자와 연산자간의 띄어쓰는 것을 잊지 말고 *는 all로 인식하므로 역슬래쉬를 꼭 사용한다.

8. 문자열
조건식에 "문자열1"="문자열2"로 비교한다. != 도 먹힌다. -z, -n 은 문자열 길이가 0인지 아닌지 판별할 때 사용

9. 파일
옵션만 잘 기억하면 된다 특히 -f, -s, -d
-f :  파일이 있는 경우
-s: 파일이 존재하고 내용이 있는 경우
-d: 디렉토리인 경우
-r : 읽기가 가능한 파일인 경우
-w : 쓰기가 가능한 파일인 경우
-x : 파일이 존재하고 실행 가능할 경우
! - 옵션 : 옵션의 조건이 아닐 경우

10. if/else
if [ 조건문 ]
then
   ......
elif [ 조건문 ]
then
else
fi

조건문에서 [ ]의 띄어쓰기를 잊지말자, and, or 옵션도 기억하자.
-a : and
-o : or

11. for
for 변수명 in 변수값1 변수값2 변수값3
do
   .....
done

C의 for문과 상당히 다르므로 주의 하자. 파일 목록의 수에 따라 루프를 돌릴 때 유용하다.
A=`ls /etc`
for B in `echo $A`
do ...
done

12. while
while [ 조건문 ]
do
   ....
done

C와 유사하다. 조건문이 참일 때 루프를 돈다. [ : ]  일때는 무조건 참이므로 무한루프

13. until
until [조건문]
do
 ....
done

C와 유사하다. 조건문이 거짓이면 do~done 구문을 실행한다.

14. case
case 변수 in
패턴1)
    스크립트;;
패턴2)
    스크립트;;
*)
    스크립트;;
esac

C와 유사하지만 패턴 다음에 )를 한다던지 스크립트 다음에 ;; 을 하는 것에 주의하자.
case를 거꾸로한 esac는 만든 이의 악취미인 듯...

15. continue, break
C와 쓰임새가 같다.

16. ANSI Escape Code
출력시 색깔 넣을 때 유용하다.
echo "^[[31m Hi ^[[0m"
30~37까지 글자색이, 40~47까지 배경색이 있다.
처음 ^은 Ctrl+v 이고, 다음 [은 Ctrl+Esc, 다음 [은 그냥 [를 키보드에서 입력하면 된다.

17. 그 밖에...
일단 세미콜론(;)이 문장마다 없고, 스크립트 언어이므로 컴파일이 필요 없다.
그리고 명령문을 변수에 담을 때는 작은 따옴표 '가 아닌 `을 사용해야 한다.
case 스크립트에는 `를 할 필요가 없다.

차후 더 보충할 사항이 있으면 차차 올리겠다.

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,