발걸음/일지
[Linux] Shell Script
리꾸므
2022. 12. 28. 14:13
Shell Script
'.bat'파일을 실행하면 프로그램이 자동 실행되는 것처럼 쉘 명령어들을 텍스트 파일이 모아서 실행해준다. 인터프리터 방식이므로, 한줄씩 읽어 실행함으로 다소 속도가 느리다.
- 쉘스크립트를 쓰면 안되는 상황
- 리소스에 민감한 작업들, 특히 속도가 중요한 요소일때(정렬, 해쉬 등)
- 플랫폼간 이식성이 필요할 때
- 강력한 산술 연산 작업들, 특히 임의 정밀도 연산이나 복소수를 써야할 때
Shell Script 작성순서
1. vi편집기로 텍스트 파일 작성
$ vi script.sh
2. Shebang(첫번째 행)
#!/usr/bin/bash
스크립트 첫번째 행은 어떤 쉘로 스크립트를 실행할지 정의하는 곳이다.
- 유닉스 쉘 종류
- sh : 초기의 유닉스 쉘
- ksh : 콘 쉘이라고도 불리며 1983년 데이비드 콘이 개발했으며 sh를 확장하여 만듬
- csh : 1978년 버클리 대학에서 C언어를 기반으로 만든 쉘
- bash : 1987년 브라이언 폭스에 의해 만들어진 쉘로 sh와 대부분 호환
3. 내용 작성
ex)
#!/usr/bin/bash
for i in {2..9}; do # 2에서 9까지 레인지 리스트를 순회
for j in {1..9}; do # 1에서 9까지 레인지 리스트를 순회
echo "$i * $j = $((i*j))" # $(( )) 는 괄호안의 문자를 산술 처리 해준다.
done
done
내용 작성 후 vi로 편집시 :wq로 저장 후 종료
4. 실행권한 주기
$ chmod +x script.sh
또는
bash script.sh
bash로 실행하면 권한을 주지 않고도 실행된다.
변수 선언 및 자료지정
#!/usr/bin/bash
# 변수 선언 및 대입
id="test1"
password=12345
# 문자열로 저장
echo $id
echo "id.${id}"
printf "%s" $password
- 변수의 이름은 숫자를 포함할 수 있지만, 숫자로 시작할 수 없다.
- 변수에 모든 값은 문자열로 저장된다.
- 값을 사용할 때 변수명 앞에 "$"을 사용한다.
- 값을 대입할때는 특수문자 "$"를 사용하지 않는다.
- 변수 생성시 "="대입문자 앞뒤로 공백이 없어야 한다.(ex: id="test")
- echo는 개행을 포함하여 출력한다.
- printf는 개행을 포함하지 않는다.
변수 타입 지정
# C에서 const 형한정어와 거의 비슷하다.
declare -r varl
# 이 스크립트는 이후 나오는 모든"number"는 정수로 취급한다.
declare -i number
number=3
echo "number = $"number"
# 배열 타입
declare -a indices
# 연관배열(mapx 타입)
declare -A map
# 함수 타입
declare -f
# -x 환경변수(export) 지정
# 환경변수 사용시 시스템에 미리 정의된 예약 변수와 변수명이 겹치지 않게 주의하자
declare - var3
- 기본적으로 Bash 변수는 문자열만 저장한다.
- 변수 자료형 타입을 미리 지정해주는 문법도 존재한다.
매개 변수
프로그램에서도 실행할때 인자를 주듯 쉘스크립도 가능하다.
- $0 : 실행된 쉘 스크립트명
- $1 : 스크립트에 넘겨진 첫 번째 아규먼트
- $2 : 스크립트에 넘겨진 아규먼트 ~ 이후 동일
- $# : 아규먼트 개수
- $* : 스크립트에 전달된 인자 전체를 하나의 변수에 저하면 IFS 변수의 첫 번째 문자로 구분
- $@ : *와 동일하나 IFS 환경 변수를 사용하지 않는다.
- $! 실행을 위해 백그라운드로 보내진 마지막 프로그램 프로세스 번호
- $$ 쉘 스크립트의 PID
- $? 실행한 뒤의 반환 값(백그라운드로 실행된 것 제외)
#!/usr/bin/bash
echo "name : ${0}"
echo "count : ${#}"
echo "sum : ${*}"
echo "sum2 : ${@}"
echo "parameter : ${1}";
예약 변수
쉘 스크립트에서 이미 정의되어 사용중인 변수명이 있다.
- HOME : 사용자 홈 디렉토리
- PATH : 실행 파일의 경로
- LANG : 프로그램 실행 시 지원되는 언어
- UID : 사용자의 UID
- SHELL : 사용자가 로그인시 실행되는 쉘
- USER : 사용자의 계정
- FUNCNAME : 사용자의 개수
- TERM : 로그인 터미널
쉘 산술 연산
- 기본 산술 연산자
- expr 연산자
- 역따옴표로 반드시 감싸준다. 역따옴표 대신 $(())해도 동작은 한다.
- expr을 사용할 때 피연산자와 연산자 사이에 공백이 필요하다.
- 괄호를 사용하려면 \처리를 해줘야 한다.
- *는 \처리 해줘야 한다.
number1=10
number2=20
plus=`expr $number1 + $number2`
minus=`expr $number1 - $number2`
mul=`expr $number1 \* $number2`
div=`expr $number1 / $number2`
rem=`expr $number1 % $number2`
echo "plus: ${plus}"
echo "minus: ${minus}"
echo "mul: ${mul}"
echo "div: ${div}"
echo "rem: ${rem}"