해쉬기호와 느낌표(#!)로 이루어진 문자 시퀀스로 스크립트에 맨 처음에 오게된다.
셔뱅이 있는 스크립트는 유닉스 계열 운영 체제에서 프로그램으로서 실행되고 프로그램 로더가 스크립트의 첫 줄을 제외한 나머지 부분을 인터프리터 지시자로 구문 분석을 수행한다.
셔뱅의 시작이 #
인 이유는 수 많은 인터프리터 언어가 #
문자를 주석 표시자로 사용하기 때문에 일부 언어는 인터프리터 목적에 맞게 셔뱅 줄을 무시하기도 한다.
#!interpreter [optional-arg]
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl -T
인터프리터는 절대 경로여야 하고 옵션 인자는 선택사항이지만 넣을 경우 하나의 변수
여야 한다.
Shell 종류
셸 | 프롬프트 | 특징 |
---|---|---|
sh | $ | 초기 Unix 셸, 명령 프로그래밍 언어 기능을 가짐 |
bash | # | IEEE POSIX 호환, Borune Shell(sh)의 변종 |
csh | % | C프로그램 스타일의 셸 |
ksh | $ | Unix에서 가장 많이 사용되는 셸, sh의 기능 확장 |
zsh | % | Korn Shell의 기능을 포함하여 개발된 셸 |
env
는 현재 환경을 표시하거나 명령 실행을 위한 환경을 설정하는 명령어이다.
구성된 환경마다 인터프리터의 설치 경로가 다를 수 있기 때문에 대부분의 환경에서 동일한 경로로 설정된 env
를 통해 셔뱅을 사용하면
env
가 사용할 언어의 위치를 찾아 실행시켜주는 역할을 수행해주기 때문에 경로 불일치 문제를 해결할 수 있다.
#!/usr/bin/env bash
#!/usr/bin/env python
#!/usr/bin/env perl
문자열, 변수등을 터미널에 출력하는 명령어
echo test output.
test output.
echo 옵션 정리
옵션 | 기능 |
---|---|
-n | 출력시 마지막에 따라오는 개행문자를 출력하지 않음 |
-e | 역슬래시(/)와 조합되는 이스케이프 문자를 인용 부호를(")로 묶으면 사용할 수 있도록 함 |
사용자로 부터 입력을 받을 수 있는 명령어
read 옵션 정리
옵션 | 기능 |
---|---|
-p | 옵션 뒤 문자열을 입력하여 프롬프트에 문자열을 출력할 수 있다 |
-a | 입력을 배열(Array)형태로 저장한다. |
-n | 옵션뒤 숫자를 입력하여 해당하는 수만큼 문자를 입력받을 수 있다. |
현재 Shell Script의 모든 scope에서 사용가능한 변수
선언된 변수는 기본적으로 전역 변수이다.
특정 scope에서만 사용가능한 변수
변수명 앞에 local 명령어를 붙이면 지역변수로 사용할 수 있다.
응용소프트웨어가 설정을 위해 참조하는 변수
export 명령어를 이용해 사용 가능하다.
Shell Script에 미리 정의된 변수
${예약변수명}으로 사용 가능 하다.
변수 사용
- 변수 사용시 "=" 앞 뒤에 공백없이 입력하면 대입연산자로 활용된다.
- 변수명은 대소문자를 구분하지 않는다.
- 변수명에 할당된 값은 모두 문자열로 인식한다.
- 변수의 해제는 unset을 사용한다.
- 할당된 변수를 사용하기 위해서는 $, ${변수명}을 사용한다.
#!/usr/bin/env bash
a=1
b=2
result1=`expr $a + $b` # expr 사용방법
result2=$((a+b)) # 변수 처리를 사용한 방법
연산자 | 설명 |
---|---|
-eq | 두 값이 같을때 true, 다를때 false |
-ne | 두 값이 같을때 flase, 다를때 true |
-gt | 초과 시 true |
-lt | 미만 시 true |
-ge | 이상 시 true |
-le | 이하 시 true |
== | 같을 때 true |
연산자 | 설명 |
---|---|
= | 같을 때 true |
!= | 다를 때 true |
-z | length가 0일때 true |
-n | length가 0이 아니면 true |
연산자 | 설명 |
---|---|
-a | and |
-o | or |
! | not |
#!/usr/bin/env bash
if [condition1]; then
# execution command
elif [condition2]; then
# execution command
else
# execution command
fi # 종료
;;
기호로 끝을 표시한다.#!/usr/bin/env bash
case var in
case1) #var과 case1이 일치할때 조건 실행
# case1 command
;;
case2)
# case2 command
;;
case3)
# case3 command
;;
esac
# case문 종료
#!/usr/bin/env bash
#example 1
for var in range
do
# execution command
done
#example 2
for ((var=init ; var < condition ; var++))
do
# execution command
done
#example 3
for var in {start..end..inc}
do
# execution command
done
#!/usr/bin/env bash
while [condition]; do
# execution command
done
#!/usr/bin/env bash
until [condition]; do
# execution command
done
-조건문 명령어 -
반복문 탈출 :break
조건 건너 뛰기 :continue
함수 안에서 다양한 셸 명령어들을 호출 할 수 있다.
함수의 정의는 다음과 같이 할 수 있다.
#!/usr/bin/env bash
#함수 정의
function func_name() {
# function command
}
#함수 호출
func_name
함수에서 인자를 받아 매개 변수로 사용하는 방법
#!/usr/bin/env bash
function example() {
echo $1 $2 "$3"
}
example 123 first \*
함수 뒤에 공백을 기준으로 받는 인자값들을 $1부터 시작하여 매개 변수로 사용할 수 있다.
- 사용할 매개 변수의 개수가 10개가 넘어가면 {}로 감싸주어야 한다. ex) ${10}
- 특수 문자를 넘길때 백슬래시(\)를 사용하여 문자로 형태로 넘겨 주고
쌍따옴표 혹은 따옴표로 묶어서 문자 형태로 인식시켜 사용할 필요가 있다.
#!/usr/bin/env bash
function example() {
var=22
echo ${var}
}
#함수 example의 결과를 var2변수에 넣는다
var2=$(example)
#!/usr/bin/env bash
global_var=""
function global_example() {
global_var="hello"
}
global_var
echo ${global__var}
#!/usr/bin/env bash
function return_example() {
return 77;
}
echo $?
변수에 ``
(백틱)을 사용을 사용하여 리눅스 커맨드의 결과를 등록하여 사용할 수 있다.
#!/usr/bin/env bash
Info=`ls -l`
echo $Info
- 커맨드 내부에 '(따옴표)를 사용할때 내부에 변수를 사용해야할 경우 ''로 한번더 묶어주면 사용할 수 있다.
ex) sed -i '/'{위치값을 포함한 변수}'s/...'
https://unabated.tistory.com/entry/LinuxUnix%EC%89%98-Shell-%EC%9D%98-%EC%A0%95%EC%9D%98%EC%99%80-%EC%A2%85%EB%A5%98
https://jangseongwoo.github.io/shell_script/shell_script_basic/
http://wiki.redjini.com/linux
https://zetawiki.com/wiki/Bash_%ED%95%A8%EC%88%98_%EB%B0%98%ED%99%98_%EA%B0%92_%EB%B0%9B%EA%B8%B0