리눅스 프로그래밍 [쉘스크립트]
쉘 스크립트
쉘 스크립트라고 한다면 cat, awk등으로 생각할 수 있지만 쉘 스크립트 즉 .sh
는 이러한 Unix커맨드등을 나열해서 실행시키는 것이다.
따라서 어떠한 조건으로 언재 어떠한 명령을 내릴 수 있는지 설정할 수 있다.
가장 기본적인 echo명령어를 사용하여 화면에 Hello, World!
를 표시한다.
#!/bin/sh
echo "Hello, World!"
리눅스 명령어는 전부 bin폴더에 존재한다.
파이프, 리다이렉션, 반복문, 조건문, 매크로(명령어)등을 사용한다면 쉘스크립트의 능력이 크게 증가한다.
- 맨위에 작성하는 #!/bin/sh는 시스템에 쉘스크립를 사용함을 알려준다. (쉘에는 여러 종류가 있지만 )
- 주석은
#
을 앞에 사용해서 작성한다. -
특수문자를 사용할 땐
\
를 앞에 쓴다. - 변수 사용방법
- 변수이름은 영문,숫자,언더바가 사용된다.
- 값을 전달할 때는 =의 앞,뒤에 공백없이 작성한다.(문자열의 경우 ““로 감싼다.)
- 변수를 엑세스할때
$
를 넣어서 사용한다. - readonly를 사용하여 읽기전용으로 만들 수 있다.
- unset으로 삭제가능(readonly를 불가능하다.)
#!/bin/sh
var="변수1"
echo "var=$var"
var="변경"
echo $var
++ 명령어의 실행결과를 변수에 담고 싶다면 $()로 감싸서 저장할 수 있다.
a=$(ls -al)
echo $a
- 특별한 변수
- $0: 스크립트 명
- $1~9: 인수, 첫번째인수는 &1로 접근…&9로 접근
- $#: 스크립트에 전달딘 인수의 수
- $*:모든 인수를 하나로 처리
- $@:모든 인수를 각각 처리
- $?: 직전에 실행한 커맨드의 종료 값(0은 성공, 1은 실패)
$$
:이 쉘 스크립트의 프로세스 ID- $!: 마지막으로 실행한 백그라운드 프로세스 ID
- 배열사용법
#!/bin/sh
#배열만드는 법
ARRAY=(a b c d)
ARRAY[0]="42"
ARRAY[2]="24"
#배열 인자 출력
echo "ARRAY[0]: ${ARRAY[0]}"
#모든 인자 액세스
echo "ARRAY[*]: ${ARRAY[*]}"
리다이렉션
리다이렉션이란, 출력방향이나 입력방향을 재지정할 수 있는 명령어이다.
정확히는 해당 스트림의 방향을 지정할 수 있다.
앞서 리눅스 스트림에 대해서 다루었기 때문에 해당 페이지를 참고!
<
,<<
,>
,>>
으로 사용할 수 있다.
<
,<<
은 입력(0)방향을 재지정하는것
cat < /bin/cat // cat /bin/cat 같음
>
,>>
은 출략방향을 재지정하는 것으로 기본적인 모니터 출력의 방향을 변경할 수 있다.
cat /bin/cat > result.txt
>>
은 덮어쓰기이다.
파이프
앞명령어의 결과값에 대한 명령어를 적용할 수 있다. (중복가능)
정확히는 서로 다른 프로세스간 작동하는 방식이다.
cat /bin/cat grep “^d”
조건문
if [조건식] then 커맨드 fi
위의 양식이 기본적인 조건문 사용 방법이다.
#!/bin/sh
if [ "$1" -eq "$2" ]
then
echo "동일하다."
else
echo "다르다."
fi
조건식이 올바른 경우는 then아래 절이 실행되고 다를경우 else가 실행된다.
elif로 else if문을 만들 수 있다.
fi를 만나면 if문이 종료된다.
반복문
while [조건식] do 반복식 done
위의 양식이 기본적인 반복문 사용방법이다.
#!/bin/sh
a=0
while [ $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
while의 조건이 만족한다면 do아래의 반복문이 실행되도 조건이 틀리다면 done을 만나서 종료된다.
이외에도 for문, switch문등 다양하게 지원한다.
함수
아래와 같이 함수로 작성도 가능하다.
#!/bin/sh
Function () {
echo "함수 호출 테스트"
}
Function
댓글남기기