CS/운영체제

리눅스 서버 정리(셸 스크립트 프로그래밍)

Chae-ri🍒 2024. 12. 9. 20:17

- 사용자가 입력한 명령 해석 후 커널에 전달

- 커널의 처리 결과는 사용자에게 전달

한 마디로 사용자와 커널의 중간 매개체라고 생각하면 된다.

 

기본 쉘은 bash

bash 특징

- Alias 기능(명령어 단축 기능)

- History 기능(위아래 화살표키)

- 연산 기능

- Job Control 기능

- 자동 이름 완성 기능(탭키)

- 프롬프트 제어 기능

- 명령 편집 기능

 

환경 변수

"echo $환경변수이름" 으로 확인 가능

"export 환경변수=값"으로 환경 변수의 값을 변경

 

쉘 스크립트 프로그래밍

- 별도로 컴파일 하지 않고 텍스트 파일 형태로 바로 실행

- nano나 gedit으로 작성

- sh <스크립트 파일> 로 실행

- “chmod +x <스크립트 파일>” 명령으로 실행 가능 속성으로 변경한 후에, “./<스크립트파일>”명령으로 실행

 

모든 변수는 문자열로 취급("")

변수 이름은 대소문자를 구분

변수 대입 시, '=' 좌우 공백 없어야 함

 

변수의 입력과 출력

$ 문자가 들어간 글자를 출력하려면 ''로 묶어주거나 앞에 ₩ 를 붙인다.

" " 로 변수를 묶어도 된다.

숫자 계산

변수에 대입된 값을 모두 문자열로 취급

expr 명령어를 통해 변수에 들어 있는 값을 숫자로 해서 +, -, *, / 등의 연산

수식에 괄호 또는 곱하기(*)는 그 앞에 꼭 역슬래쉬(₩)를 붙임

파라미터 변수

파라미터 변수는 $0, $1, $2... 의 형태를 가짐

전체 파라미터는 $*로 표현

기본 if 문

#!/bin/sh
if [조건]
then
	참일 경우 실행
fi
exit 0

if ~ else 문

if [ 조건 ]
then
	참일 경우 실행
else
	거짓인 경우 실행
fi

case~esac 문

- if 문은 참과 거짓의 두 경우만 사용(이중 분기)

- 여러가지 경우의 수가 있다면 case 문(다중 분기)

- 요 녀석은 하나의 case문을 끝낼 때 무조건 ;;를 붙여야 한다. 상당히 띠껍게 생겼다.

#!/bin/sh
case "$1" in
	start)
		echo "시작~~";;
	stop)
		echo "중지~~";;
	restart)
		echo "다시 시작~~";;
	*)
		echo "뭔지 모름~~";;
esac
exit 0

#!/bin/sh
echo "리눅스가 재미있나요? (yes / no)"
read answer
case $answer in
	yes | y | Y | Yes | YES)
		echo "다행입니다."
		echo "더욱 열심히 하세요 ^^";;
	[nN]*)
		echo "안타깝네요. ㅠㅠ";;
	*)
		echo "yes 아니면 no만 입력했어야죠"
		exit 1;;
esac
exit 0

AND, OR 관계 연산자

- and는 '-a' 또는 '&&'를 사용

- or는 '-o' 또는 '||'를 사용

#!/bin/sh
echo "보고 싶은 파일명을 입력하세요."
read fname
if [ -f $fname ] && [ -s $fname ] ; then
	head -5 $fname
else
	echo "파일이 없거나, 크기가 0입니다."
fi
exit 0

반복문 – for~in문

for 변수 in 값1 값2 값3 …
do
	반복할 문장
done

 

반복문 - while문

- 조건식이 참인 동안에 계속 반복

- [ 1 ] 또는 [ : ]가 오면 항상 참이 된다.

1에서부터 10까지 합을 while문으로 한다면?

비밀번호를 입력받고 맞을 때까지 계속 입력한다면?

until 문

- 조건식이 참일 때까지 계속 반복한다. (while이랑 반대)

1에서부터 10까지 합을 until 문으로 한다면?

=> while문과 동일하게 작성하되, until [ $i -gt 10 ] 로 바꾼다. (10보다 클 때까지 계속 돈다.)

 

break, continue, exit, return 문

 

사용자 정의 함수

함수이름 ( ) { → 함수를 정의
	내용들…
}
함수이름 → 함수를 호출

함수의 파라미터 사용

함수이름 ( ) { → 함수를 정의
	$1, $2 … 등을 사용
}
함수이름 파라미터1 파라미터2 … → 함수를 호출

 

eval

문자열을 명령문으로 인식하고 실행

#!/bin/sh
str="ls -l eval.sh"
echo $str
eval $str
exit 0

export

- 외부 변수로 선언해줌.

- 선언한 변수를 다른 프로그램에서도 사용할 수 있도록 함.

printf

C언어의 printf() 함수와 비슷하게 형식을 지정해서 출력

set과 $(명령어)

- 리눅스 명령어를 결과로 사용하기 위해서는 $(명령어) 형식을 사용

- 결과를 파라미터로 사용하고자 할 때, set과 함께 사용

shift

파라미터 변수를 왼쪽으로 한 단계씩 아래로 쉬프트시킴

728x90