Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Spark jdbc parallel read
- Linux
- 앙상블
- Spark Data Read
- Python
- git init
- git stash
- 알고리즘
- 데이터분석
- 통계분석
- 추천시스템
- 오라클 데이터 처리방식
- 랜덤포레스트
- Oracle 논리적 저장 구조
- 배깅
- Decision Tree
- Oracle ASSM
- git 기본명령어
- 네트워크
- airflow 정리
- 리눅스 환경변수
- SQL
- Collaborative filtering
- CF
- enq: FB - contention
- 의사결정나무
- eda
- Spark 튜닝
- BFS
- 데이터 분석
Archives
- Today
- Total
[Alex] 데이터 장인의 블로그
[Linux] Bash 쉘스크립트 사용법 정리 본문
쉐뱅(Shebang)
#! 로 선언하여 이 스크립트를 어떤 인터프리터로 지정하겠다는 명령어
#!/bin/bash
사용할 수 있는 쉘 확인 방법
- cat /etc/shells
주석 처리
- #로 시작하면 주석
vi 상태, insert ( i ) 모드에서 한줄 삭제하기
- dd
함수 만들기
함수 예시 스크립트
#!/bin/bash
hello_function() {
echo "Hello!!!"
}
hello_function # 함수 선언
실행 예시
$ sh func.sh
Hello!!!
함수에 인자전달 및 함수에서 값 리턴
인자전달
함수 내부에서는 $1, $2와 같은 형식으로 인자에 접근할 수 있습니다.
#!/bin/bash
my_function() {
echo "Calling my_function p1: $1, p2: $2"
}
my_function aaa 123
$ sh func.sh
Calling my_function p1: aaa, p2: 123
값 리턴
함수에서 어떤 값을 리턴할 때 return 키워드를 사용하면 됩니다. 다른 언어들과 같이 return이 호출되면, 함수가 종료되며 값이 리턴됩니다. 리턴이 되면, 함수 외부에서 $?를 통해 return value를 읽을 수 있습니다.
#!/bin/bash
my_function() {
echo "Calling my_function p1: $1, p2: $2"
return 100
}
my_function aaa 123
ret=$? #return value 변수 저장
echo "Return value: $ret"
$ sh func.sh
Calling my_function p1: aaa, p2: 123
Return value: 100
변수 사용시 주의할 점
- 변수 사용시 = 기호 앞뒤로 공백없이 사용
- 파이썬과는 달리 띄어쓰기를 하면 에러 발생.
- 함수 안에서 사용하는 변수는 local, 이외에는 global
위치 매개변수
- $0 : 실행된 스크립트 이름
- $1 : 인자 순서대로 부여 10번째 부턴 "{}" 감싸줘야 함
- $@ : 전체 인자값
- $# : 매개변수 총 개수
- $? : 실행 명령의 exit code(성공한 경우 0, 더 궁금하면 bash exit code 검색)
반복문 (Loop 문)
for 문
for i in (seq 변수나 직접 변수 입력)
do [명령어 입력] done
#!/bin/bash
SEQUENCE=$(seq 0 9)
for i in $SEQUENCE
do
echo "Running loop seq ${i}"
done
$ sh func.sh
Running loop seq 0
Running loop seq 1
Running loop seq 2
Running loop seq 3
Running loop seq 4
Running loop seq 5
Running loop seq 6
Running loop seq 7
Running loop seq 8
Running loop seq 9
seq 안쓰고 수동으로 입력하기
#!/bin/bash
ORDER="5 6 7 8 9 4 3 2 1 0"
for i in $ORDER
do
echo "Running loop ${i}"
done
C / C++ 스타일 Loop 문
#!/bin/bash
for ((i=0;i<=9;i++))
do
echo "Running loop "$i
done
while 문
조건이 true일 때 실행
while [조건]; do
마찬가지로 실행 횟수 지정이 필요하지 않는 반복문이 필요할 때 사용
tip. 비교 표현식 줄임말
- eq - equal(=)
- ne - not eqaul(<>)
- lt - little(<)
- le - little or equal (<=)
- gt - greater(>)
- ge - greater or eqaul(>=)
#!/bin/bash
count=0
while [ ${count} -le 5 ]; do
echo ${count}
count=$(( ${count}+1 ))
done
조건문 (if elif)
if [ condition ]; then ~ fi로 구성(fi는 if를 거꾸로)
if_test.sh
AND 조건 : &&
OR 조건 : ||
#!/bin/bash
string1=$1
string2=$2
string3="awesome"
if [ ${string1} == ${string2} ]; then
echo "string 1, string2 is same"
elif [ ${string1} == ${string3} ]; then
echo "string 1 is awesome"
else
echo "else condition"
fi
$ sh func.sh
string 1, string2 is same
선택문(case)
- 정규식을 지원
- | 기호로 다중값 입력 가능(or 조건)
- 조건 문장 끝에 ;;로 끝을 표시
- case ~ esac(easc는 case 거꾸로)
#!/bin/bash
for string in "hi" "HELLO" "WORLD" "hello" "world" "wow" "awesome" "start" "end" "etc"; do
# case 문 시작
case ${string} in
hello|HELLO)
echo "hello or HELLO : ${string}"
;;
wo*)
echo "wo로 시작하는 단어 : ${string}"
;;
a*|end)
echo "a로 시작하는 단어 or end일 때 : ${string}"
;;
*)
echo "기타 : ${string}"
;;
esac # case 거꾸로
done
$ sh func.sh
기타 : hi
hello or HELLO : HELLO
기타 : WORLD
hello or HELLO : hello
wo로 시작하는 단어 : world
wo로 시작하는 단어 : wow
a로 시작하는 단어 or end일 때 : awesome
기타 : start
a로 시작하는 단어 or end일 때 : end
기타 : etc
set 변수 (명령 실패 시 스크립트 자동 종료)
선행 명령 성공조건에 따른 실행 조건
- 만약 git으로부터 소스코드를 가지고 온 후에 clean 작업과 make 작업을 순차적으로 시행하여야 한다면?
- 여기서 중요한 점은 순차적으로 실행시키되, 선행하는 명령에 오류 혹은 문제가 발생할 경우 후행 명령을 수행하지 않아야 한다.
#!/bin/bash
set -e # set -e 옵션을 설정, 리턴 값을 체크하여 0(성공)이 아닐 경우 자동으로 종료.
git pull
make clean
make
# set -x 명령을 실행하기에 앞서서 명령을 출력,
# -e로 종료되었을 경우 어디서 종료되었는지 디버깅하기에 용이
set -ex # set -e +x
git pull
make clean
make
- set -e : 오류가 발생하면 스크립트를 바로 종료. 파이썬에서 오류나면 그 밑에 실행안되는 것을 해주는 옵션.
- set -x : 어디서 오류가 발생했는지 출력, set -e 명령어와 주로 함께 사용됨.
- set -u : 정의하지 않은 변수가 있으면 바로 종료
- set -o pipefail : 파이프라인의 명령이 실패하면 해당 리턴 코드가 파이프라인의 리턴 코드로 사용됨
반응형
'Linux&OS' 카테고리의 다른 글
[Linux] grep, awk를 활용한 kill process (1) | 2022.03.21 |
---|---|
[OS] 캐시메모리와 버퍼메모리 정리(+ 레지스터) (0) | 2021.12.16 |
[Linux] 데이터 엔지니어링을 위한 sed, xargs, nohup, scp 기본 명령어 정리 (0) | 2021.12.11 |
[Linux] 데이터 엔지니어링을 위한 awk 명령어 정리 (0) | 2021.12.11 |
[Server] WAS 서버와 웹서버의 차이 (0) | 2021.12.02 |
Comments