쉘을 사용해서 프로그래밍을 할 수 있습니다. 서버 작업 자동화 및 운영을 위해 기본적으로는 익혀둘 필요가 있습니다. 쉘 명령어를 기본으로 하되, 몇가지 문법이 추가된 형태입니다.
기본문법
쉘 스크립트는 파일로 작성 후, 파일을 실행하는 형식입니다. 파일의 가장 위의 첫 라인은 '#!/bin/bash'로 시작합니다. 쉘 스크립트 파일은 실행 권한을 가지고 있어야 합니다. 일반적으로 '파일이름.sh'와 같은 형태로 파일 이름을 작성합니다.
(bash 쉘에서 제공하는 echo 함수를 이용해서 화면에 'Hello bash!' 출력 예시)
--> hello.sh 파일에 작성
#!/bin/bash
echo 'Hello bash!'
--> 실행이 안된다면 실행 권한을 확인해야 합니다.
변수
선언 방법은 띄어쓰기 없이 '변수명=데이터'로 선언할 수 있습니다. '$변수명'을 통해서 사용할 수 있습니다.
(실제 이름, 나이, 직업을 선언하는 예시)
--> id.sh 파일에 작성
#!/bin/bash
myname='GeumyongSeok'
myage=20
mycareer='IT'
echo $myname $myage $mycareer
리스트 변수 (배열)
'변수명=(데이터1 데이터2 데이터3)' 형식으로 변수를 선언할 수 있습니다. '${변수명[인덱스번호]}'를 통해서 사용할 수 있습니다.
ex)
#!/bin/bash
daemons=('http' 'mysql' 'vsftpd')
echo ${daemons[1]}
# $daemons 배열의 두 번째 인덱스에 해당하는 mysql 출력
echo ${daemons[@]}
# $daemons 배열의 모든 데이터 출력
echo ${daemons[*]}
# $daemons 배열의 모든 데이터 출력
echo ${#daemons[@]}
# $daemons 배열 크기 출력
filelist=( $(ls) )
# 해당 쉘스크립트 실행 디렉토리의 파일 리스트를 배열로 $filelist 변수에 입력
echo ${filelist[*]}
# $filelist 모든 데이터 출력
사전에 정의된 지역 변수
$$: 쉘의 프로세스 번호
$0: 쉘 스크립트 이름
$1 ~ $9: 명령줄 인수
$*: 모든 명령줄 인수리스트
$#: 인수의 개수
$?: 최근 실행한 명령어의 종료 값 ( 0 -> 성공 / 1 ~ 125 -> 에러 / 126 -> 파일이 실행가능하지 않음 / 128 ~ 255 -> 시그널 발생)
연산자
expr은 숫자 계산을 합니다. expr을 사용하는 경우 역작은 따옴표(`)를 사용해야 합니다. 연산자 *와 괄호 앞에는 역슬래시를 같이 사용합니다. 연산자와 숫자, 변수, 기호 사이에는 띄어쓰기를 넣어줘야 합니다.
ex)
num = `expr \( 3 \* 5 \) / 4 + 7`
조건문
기본 if 구문
명령문을 꼭 탭으로 띄워야 하는 것은 아닙니다. (then과 fi 안에만 들어가 있으면 됩니다.)
if [ 조건 ]
then
명령문
fi
조건
문자1 == 문자2 : 문자1과 문자2가 일치
문자1 != 문자2 : 문자1과 문자2가 일치하지 않음
-z 문자 : 문자가 null이면 참
-n 문자 : 문자가 null이 아니면 참
수치 비교 (위의 조건 같은 경우 if 조건 시 [[]]를 넣는 경우 정상 작동하지만, 기본적으로 다음 문법을 사용하는 것을 권장합니다.)
값1 -eq 값2 : 값이 같음
값1 -ne 값2 : 값이 같지 않음
값1 -lt 값2 : 값1이 값2보다 작음
값1 -le 값2 : 값1이 값2보다 작거나 같음
값1 -gt 값2 : 값1이 값2보다 큼
값1 -ge 값2 : 값1이 값2보다 크거나 같음
파일 검사
-e 파일명 : 파일이 존재하면 참
-d 파일명 : 파일이 디렉토리면 참
-h 파일명 : 심볼릭 링크 파일이면 참
-f 파일명 : 파일이 일반파일이면 참
-r 파일명 : 파일이 읽기 가능하면 참
-s 파일명 : 파일 크기가 0이 아니면 참
-u 파일명 : 파일이 set-user-id가 설정되면 참
-w 파일명 : 파일이 쓰기 가능 상태이면 참
-x 파일명 : 파일이 실행 가능 상태이면 참
(해당 파일이 있는지 없는지를 출력하는 쉘 스크립트 예시)
#!/bin/bash
if [ -e $1 ]
then
echo 'file exist'
fi
논리 연산
조건1 -a 조건2 : AND
조건1 -o 조건2 : OR
조건1 && 조건2 : 양쪽 다 성립
조건1 || 조건2 : 한쪽 또는 양쪽 다 성립
!조건 : 조건이 성립하지 않음
true : 조건이 언제나 성립
false : 조건이 언제나 성립하지 않음
기본 if/else 구문
if [ 조건 ]
then
명령문
else
명령문
fi
반복문
for문
for 변수 in 변수값1 변수값2 ...
do
명령문
done
(현재 디렉토리에 있는 파일과 디렉토리 출력 예시)
#!/bin/bash
for database in $(ls)
do
echo $database
done
while문
while [조건문]
do
명령문
done
(현재 디렉토리에 있는 파일과 디렉토리 출력 예시)
#!/bin/bash
lists=$(ls)
num=${#lists[@]}
index=0
while [$num -ge 0]
do
echo ${list[$index]}
index=`expr $index + 1`
num=`expr $num - 1`
done
'시스템 프로그래밍' 카테고리의 다른 글
메모리와 mmap (0) | 2021.05.07 |
---|---|
스레드 관리 (0) | 2021.05.07 |
시그널 (signal) (0) | 2021.05.07 |
IPC 기법 (0) | 2021.05.07 |
프로세스 관리 - 프로세스 종료 (0) | 2021.05.06 |