Shell Scripting

HappyLoop·2026년 7월 17일

Linux

목록 보기
6/7
post-thumbnail

1. jq

jq는 터미널에서 JSON 데이터를 조회·필터링·변환·정렬해서 출력하는 명령. API 응답을 확인하거나 JSON 파일에서 원하는 값만 꺼낼 때 자주 사용한다.

1. 기본 형식

jq'필터' JSON파일# 파이프로 JSON 전달
명령어 | jq'필터'

예:

curl https://example.com/api | jq'.'
jq'.' data.json

.은 JSON 전체를 보기 좋게 출력한다.

2. 기본 필터

# 전체 JSON 출력
jq '.' data.json

# 특정 키 선택
jq '.name' data.json

# 중첩된 값 선택
jq '.user.name' data.json

# 배열의 모든 요소 선택
jq '.users[]' data.json

# 배열 각 요소의 name 출력
jq '.users[].name' data.json
.       → 전체 JSON
.key    → 특정 키
[]      → 배열의 모든 요소
|       → 여러 jq 작업 연결

3. 간단한 사용 예시

# 특정 값 추출
echo '{"name":"John","age":30}' | jq '.name'

# 결과
"John"

# 배열에서 모든 이름 추출
echo '[{"name":"John"},{"name":"Jane"}]' | jq '.[].name'

# 결과
"John"
"Jane"

# 값 수정
echo '{"name":"John","age":30}' | jq '.age = 31'

# 원하는 구조로 재구성
echo '[{"name":"John"},{"name":"Jane"}]' |
jq '{names: [.[].name]}'

4. 주요 옵션

# 따옴표 없이 문자열만 출력
jq -r '.name' data.json

# 입력 여러 개를 하나의 배열로 묶기
jq -s '.' file1.json file2.json

# 한 줄로 압축해서 출력
jq -c '.' data.json

# 색상 없이 출력
jq -M '.' data.json
-r → 문자열의 큰따옴표 제거
-s → 모든 입력을 하나의 배열로 묶음
-c → 공백과 줄바꿈을 줄인 한 줄 출력
-M → 색상 출력 비활성화

5. curl과 함께 사용

# API 응답을 보기 좋게 출력
curl https://example.com/api | jq '.'

# API 응답에서 name만 추출
curl https://example.com/api | jq '.name'

# 배열에서 특정 필드만 추출
curl https://example.com/users | jq '.[].name'

jq = JSON 데이터에서 원하는 값을 찾고,
필터링하고, 구조를 변경하는 터미널용 JSON 처리 도구

2. Bash Shell

1. Bash Shell이란?

Bash는 명령어를 해석하고 실행하는 셸 프로그램. 사용자가 입력한 명령을 받아 리눅스 시스템에 전달한다.

Bash = Bourne Again Shell

- 리눅스에서 널리 사용되는 명령어 해석기
- 명령어를 직접 실행할 수 있음
- 여러 명령어를 스크립트로 작성해 자동화할 수 있음

2. Bash Shell Script

셸 스크립트는 여러 리눅스 명령어를 .sh 파일에 작성해 한 번에 실행하는 파일.

우분투안에서 사용자 명령어를 인식하는 셸 인터프리터인 bash 존재

# 스크립트 파일 생성
vi my_script.sh

파일 내용:

#!/bin/bash

# 주석
echo "Hello, World!"

실행 권한 부여 후 실행:

chmod +x my_script.sh
./my_script.sh
#!/bin/bash
→ 이 스크립트를 Bash로 실행하라는 의미

#
→ 주석

echo
→ 터미널에 문자열 출력

chmod +x
→ 실행 권한 추가

./my_script.sh
→ 현재 디렉터리의 스크립트 실행

3. 스크립트 실행과 source 차이

일반 실행:

./my_script.sh

현재 셸과 별도의 프로세스에서 실행되므로, 스크립트에서 만든 변수나 설정이 실행 후 현재 셸에 남지 않는다.

💡source는 임포트 개념

source my_script.sh
. my_script.sh
일반 실행
→ 새로운 셸에서 실행
→ 변수와 설정이 현재 셸에 남지 않음

source 실행
→ 현재 셸에서 실행
→ 변수, 함수, alias 등의 설정이 현재 셸에 적용됨

환경 설정 파일을 적용할 때 자주 사용한다.

source ~/.bashrc

Bash
→ 리눅스 명령어를 해석하는 셸

Bash Script
→ 여러 명령어를 파일로 만들어 자동 실행

source
→ 스크립트 내용을 현재 셸 환경에 직접 적용

Bash Shell 문법 핵심 요약

1. 변수

변수 선언 시 = 앞뒤에 공백을 넣으면 안 되고, 사용할 때는 $변수명으로 접근.

name="Alice"
echo "Hello, $name!"
name="Alice"  → 변수 저장
$name         → 변수 값 사용
${name}       → 변수 이름의 범위를 명확히 표현

2. 명령어 실행 결과 저장

$(명령어)는 명령어의 실행 결과를 변수에 저장할 때 사용.

hour=$(date +%H)
echo "$hour"

3. 조건문

if [ 조건 ]; then
    명령어
elif [ 조건 ]; then
    명령어
else
    명령어
fi

예시:

hour=$(date +%H)

if [ "$hour" -lt 12 ]; then
    echo "Good morning!"
elif [ "$hour" -lt 18 ]; then
    echo "Good afternoon!"
else
    echo "Good evening!"
fi

[와 ] 양쪽에는 반드시 공백이 필요해.

4. 비교 연산자

# 문자열 비교
=, ==  → 같음
!=      → 다름
-z      → 문자열이 비어 있음
-n      → 문자열이 비어 있지 않음

# 숫자 비교
-eq → 같음
-ne → 다름
-gt → 초과
-ge → 이상
-lt → 미만
-le → 이하

예시:

if [ "$name" = "Alice" ]; then
    echo "Hello Alice"
fi

if [ "$age" -ge 20 ]; then
    echo "Adult"
fi

5. 파일 검사 연산자

-f → 일반 파일이 존재하는지 확인
-d → 디렉터리가 존재하는지 확인
-s → 파일이 존재하고 내용이 있는지 확인
-r → 읽기 가능한지 확인
-w → 쓰기 가능한지 확인
-x → 실행 가능한지 확인

예시:

if [ -f "example.txt" ]; then
    echo "파일이 존재합니다."
fi

6. for 반복문

목록의 값을 하나씩 꺼내 반복한다.

for i in 1 2 3 4 5; do
    echo "Number: $i"
done

7. while 반복문

조건이 참인 동안 반복한다.

counter=0

while [ "$counter" -lt 5 ]; do
    echo "Counter: $counter"
    counter=$((counter + 1))
done

자료의 while [ 조건 ]; then은 잘못된 문법이고, then이 아니라 do를 사용해야 함.

$((수식))
→ Bash에서 숫자 계산을 수행하는 문법

8. 함수

반복해서 사용할 코드를 하나의 이름으로 묶는다.

greet() {echo"Hello,$1!"
}

greet"Alice"
greet"Bob"
$1 → 함수에 전달한 첫 번째 값
$2 → 두 번째 값
$# → 전달된 값의 개수
$@ → 전달된 모든 값

9. 오류 처리

파일이 존재하지 않으면 오류 메시지를 출력하고 스크립트를 종료하는 예시.

file="example.txt"if [ !-f"$file" ];thenecho"Error:$file does not exist!"exit1fiecho"$file exists."
!      → 조건을 반대로 판단
exit 0 → 정상 종료
exit 1 → 오류로 종료
profile
A developer who codes with joy, never boring!

0개의 댓글