* 쉘 스크립트
- 명령어들을 연속적으로 실행하는 인터피리터 환경 제공
- 제어문과 변수 선언 등이 가능한 프로그래밍 언어와 유사
- 프로그래밍 언어와 스크립트 언어
- 프로그래밍 언어
- 대부분 소스 코드를 컴파일 하여 실행 가능한 파일로 만들어짐
- 일반적으로 실행 파일은 다른 운영체제로 이식되지 않음
- 스크립트 언어
- 컴파일 과정이 없고 인터프리터가 소스 파일에 명령문을 판독 하여 각각의 명령을 수행
- 쉴스크립트의 기본
- 쉘스크립트 언어
- 일반적으로 '.sh'라는 확장자를 가짐
#!/bin/bash
echo 'Hello Linux'
- #!/bin/bash는 해당 스크립트를 실행 하기 위한 쉘의 경로
- 실행 권한을 부여하고 './파일명'로 수행한다.
- 리다이렉션
- 표준입력을 파일로 지정 : < 또는 << 사용
- 표준출력을 파일로 지정 : > 또는 >> 사용
- 포준에러 파일로 지정
- 예> grep abc * 2> grep_errors.txt
- 표준출력을 표준에러로 보내기
- 예> grep abc * 1>&2
* 변수
- 환경변수
- 초기 설정에 대한 정보를 저장하는 변수
- 특수 변수
- 쉘프로그램에 전달 됨, 명령 행 인수 등
- ${?}, ${인수번호} 등
- 예 : ls -l ${1} > ~/mydir.txt
- 프로그램 변수
- 쉘 스크립트의 변수는 필요 시 선언 하여 사용할 수 있음
- 변수의 데이터 타입(숫자, 문자, 문자열)을 정할 필요 없음
- 값 설정
- 변수 = 값
#!/bin/bash
STR="Have a good day!"
echo $STR
* 조건문
- if문
if [조건]; then
[문장]
...
fi
- if-else문
if [조건1]; then
[문장1]
..
..
else
[문장2]
...
...
fi
- if- else if
if [조건1]; then
[문장1]
...
...
elif [조건2]; then
[문장2]
...
...
else
[문장3]
...
...
fi
- 비교연산
- A -eq B : A=B
- A -ne B : A!=B
- A -gt B : A > B
- A -lt B : A < B
- A -ge B : A >= B
- A -le B : A <= B
- 문자열 비교
- string1 = stirng2 => string1과 string2가 같음 (또는 ==)
- ex 1) if [ $1 = hi ]
- ex 2) if test $1 == "hi"
- string1 != string2 : string1과 string2가 같지 않음
- ex) if [ $1 != 'bye' ]
- string : string이 정의 되어 있고 NULL 이 아님
- ex) if [ $1 ]
- -z string : string이 정의 되어있지 않거나 null임
- ex) if [ -z string ]
- 파일 조건
- -e file : file 이 존재함
- -f file : file 이 존재하며 일반 파일이고 디렉터리가 아님.
- -d dir : dir 이 존재하며 디렉터리임.
- -r (또는 w,x) file : file이 존재하며 읽기(또는 쓰기, 실행) 가능
- 논리 연산
- !표현식 : NOT
- 표현식1 -a 표현식2 : AND
- 표현식1 -o 표현식2 : OR
- 특수문자
- 따옴표의 의미
- '...' : 안의 내용을 해석 하지 않음(\문자 제외)
shell>echo '"$PATH"'
"$PATH"
- "..." : 안의 특수문자를 일반 문자로 취급 $,\,`등의 문자는 해석함.
shell>echo "'$PATH'"
'이런저런환경변수값 --;;;'
- `...` 또는 $(...) : 안의 내용을 실행(`..`는 가독성이 썰어져 $(...)가 권장됨
shell>echo "Today is `date`"
Today is 현재시간출력
shell>echo $(expr 3\*7)
21
- 연산자
- 산술연산자
- +,-,*,/,% : 더하기 , 빼기, 곱하기, 나누기, 나머지
sum=$(expr $a + $b)
mul=$(expr $a \* $b)
mod='expr $a % $b'
- 논리 연산자
- !, &&, || : NOT, AND, OR
- if [ $# -gt 0 -a $# -lt 4 ] 의 결과는 if [ $# -gt 0 ] && [ $# -lt 4 ]와 같다.
* 순환문
- do ~ done 사이의 구문을 지정한 조건만큼 반복
- 순환문의 종류 : for, while, until
- for문
- 각 원소에 대해 구문을 수행
for 변수 in list1 list2 list3 또는 for ((초기값; 조건; 증가식))
do
문장
...
done
#!/bin/bash
if [ $# eq 0 ]
then
echo "Usage: $0 integer_number"
else
# for num in 1 2 3 4 5 6 7 8 9 와 같음
for ((num=1; num<=9; num++ ))
do
echo " $1 * $num = `expr $1 \* $num `"
done
fi
- while 문
- 조건이 참인 동안 구문을 수행
while 조건
do
문장들
...
done
#!/bin/bash
if [$# -eq 0]; then
echo "Usage: $0 integer_number"
else
num=1
while [ $num -le 9 ]
do
echo "$1 * $num = $(expr $1 \* $num)"
num="expr $num+1"
done
fi
- Until 문
- 조건이 거짓인 동안 수행
until 조건
do
문장들
...
done
* 함수
- 함수
- 특정한 일을 수행 하는 기능이 구현 된 코드 블록
- 함수 정의
function 함수명{
문장들
...
}
- 함수 호출
- 함수명 또는 함수명 인자들
#!/bin/bash
function mult()
{
for ((i=1;i<=9;i++))
do
echo "$1 * $i = `expr $1 \* $i`"
done
}
if [$# -eq 0]; then
for ((num=1; num<9; num++))
do
mult $num
done
else
mult $1
fi
* 디버깅
- 쉘 스크립트의 첫번째 행에 -x를 추가한다.
- #!/bin/bash -x
- 실행 과정을 자세히 보여줌
'OS의 속삭임 > Linux의 외침' 카테고리의 다른 글
[OS][LINUX][SHELL] 쉘 개요 (0) | 2013.12.11 |
---|---|
[OS][LINUX][subversion]SVN 설치 및 설정 (0) | 2013.06.10 |
[OS][LINUX][Subversion]콘솔 환경에서 svn 사용하기. (0) | 2013.06.04 |
[OS][LINUX][oracle]Oracle 11g설치 (0) | 2013.06.04 |
[OS][LINUX][tomcat]server.xml 설정 (0) | 2013.06.04 |