Search
Duplicate
📒

[Linux CLI] 08-x Shell Script

상태
수정중
수업
Linux
주제
Linux CLI
4 more properties
참고

Shell Script 란

NOTE
Shell이나 cli 인터프리터에서 구동되도록 작성된 스크립트!
터미널에서 작성하던 명령어들을 하나의 스크립트 파일에 나열하여, 실행한다.

Shebang

NOTE
쉘 스크립트를 작성할 때 첫 번째행에 작성해주는 것!
#!/usr/bin/bash # ...
Bash
복사
어떤 쉘로 스크립트를 실행할지 정의하는 곳
python과 같은 다른 파일이 아닌, bash로 실행시키라는 의미

Shell 변수선언

NOTE
변수의 타입에는 로컬, 전역, 환경, 매개변수 등 다양한 변수가 존재한다!
변수는 대,소문자를 구별한다.
변수에는 모든 값을 문자열로 저장한다.
변수에는 자료형을 기입하지 않는다.
값을 넣을 때는 $기호를 사용하지 않고, =앞뒤로 공백이 없어야 한다.
data=”abcd”

전역 변수 & 지역 변수

NOTE
쉘 스크립트를 작성할 때 첫 번째행에 작성해주는 것!
## 전역변수 name="inpa" # 변수 선언 및 대입 pass=123123 # 따옴표로 감싸든 말든 문자열임 ## 지역변수 function string_test(){ # local을 붙이면 지역변수로 인식 (안붙이면 전역변수에 덮어씌어짐) local string="hello local @@" # 함수내에서만 사용됨 echo ${string} } string_test
Bash
복사

변수 타입 지정

NOTE
쉘 스크립트를 작성할 때 첫 번째행에 작성해주는 것!
# -r 읽기 전용 (상수) declare -r var1 readonly var1 # -i 정수형 declare -i number number=3 echo "number = $number" # -a 배열 declare -a indices # -A 연관배열(MAP) declare -A map
Bash
복사
Bash는 기본적으로 문자열만 저장한다.
하지만 여타 프로그래밍 언어같이 변수 자료형을 미리 지정해주는 문법도 존재한다.

환경 변수

NOTE
# 환경 변수 선언 export hello_world="global hello world" # 자식 스크립트 호출은 스크립트 경로을 쓰면된다. bash export_test.sh
Ruby
복사
#!/usr/bin/bash echo ${hello_world}
Ruby
복사
export.sh 파일
export를 붙여주면 환경변수로 설정되어 자식 스크립트에서 사용이 가능!

매개 변수

NOTE
echo "script name : ${0}" echo "매개변수 갯수 : ${#}" echo "전체 매개변수 값 : ${*}" echo "전체 매개변수 값2 : ${@}" echo "매개변수 1 : ${1}" echo "매개변수 2 : ${2}"
Bash
복사
bash argument.sh 가 나 다 라 마 바 사
Bash
복사
종류
설명
$0
실행된 셸 스크립트명
$1
스크립트에 넘겨진 첫 번째 아규먼트
$2
스크립트에 넘겨진 두 번째 아규먼트
$3 S4 등등 .. 이후 $숫자
그 이후 해당되는 아규먼트
$#
아규먼트 개수
$*
스크립트에 전달된 인자 전체를 하나의 변수에 저장하면 IFS 변수의 첫 번째 문자로 구분
$@
$*와 동일한데 다른 점은 IFS 환경 변수를 사용하지 않는다는 점.
$!
실행을 위해 백그라운드로 보내진 마지막 프로그램 프로세스 번호
$$
셸 스크립트의 PID
$?
실행한 뒤의 반환 값 (백그라운드로 실행된 것 제외)

Shell 조건문 & 반복문

조건문

NOTE
num1=10 num2=10 # 비교 연산 if [ ${num1} -lt ${num2} ]; then # "-lt", A가 B보다 작으면 True echo "yes" elif [ ${num1} -eq ${num2} ]; then # "-eq", A와 B가 서로 같으면 True echo "bbb" else echo "no" fi # 이중 소괄호 쓰면 논리 연산자 사용가능 if((${num1} < ${num2})); then echo "yes" elif(( ${num1} == ${num2})); then echo 'bbb' else echo 'no' fi
Bash
복사

비교연산

값1 -eq 값2 # 값이 같음(equal) 값1 -ne 값2 # 값이 같지 않음(not equal) 값1 -lt 값2 # 값1이 값2보다 작음(less than) 값1 -le 값2 # 값1이 값2보다 작거나 같음(less or equal) 값1 -gt 값2 # 값1이 값2보다 큼(greater than) 값1 -ge 값2 # 값1이 값2보다 크거나 같음(greater or equal)
Bash
복사

논리연산

조건1 -a 조건2 # AND 조건1 -o 조건2 # OR 조건1 && 조건2 # 양쪽 다 성립 조건1 || 조건2 # 한쪽 또는 양쪽다 성립 !조건 # 조건이 성립하지 않음 true # 조건이 언제나 성립 false # 조건이 언제나 성립하지 않음
Bash
복사

반복문

NOTE
# 초기값; 조건값; 증가값; for ((i=1; i<=4; i++)); do echo $i done
Bash
복사
# for in 문법 for x in 1 2 3 4 5 do echo "${x}" done data="1 2 3 4 5" for x in $data do echo "${x}" done # 배열을 사용한 반복문 arr=(1 2 3 4 5) for i in "${arr[@]}" # arr[@] : 배열 전체 출력 do echo "${i}" done
Bash
복사