jq는 터미널에서 JSON 데이터를 조회·필터링·변환·정렬해서 출력하는 명령. API 응답을 확인하거나 JSON 파일에서 원하는 값만 꺼낼 때 자주 사용한다.
jq'필터' JSON파일# 파이프로 JSON 전달
명령어 | jq'필터'
예:
curl https://example.com/api | jq'.'
jq'.' data.json
.은 JSON 전체를 보기 좋게 출력한다.
# 전체 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 작업 연결
# 특정 값 추출
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]}'

# 따옴표 없이 문자열만 출력
jq -r '.name' data.json
# 입력 여러 개를 하나의 배열로 묶기
jq -s '.' file1.json file2.json
# 한 줄로 압축해서 출력
jq -c '.' data.json
# 색상 없이 출력
jq -M '.' data.json
-r → 문자열의 큰따옴표 제거
-s → 모든 입력을 하나의 배열로 묶음
-c → 공백과 줄바꿈을 줄인 한 줄 출력
-M → 색상 출력 비활성화
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 처리 도구
Bash는 명령어를 해석하고 실행하는 셸 프로그램. 사용자가 입력한 명령을 받아 리눅스 시스템에 전달한다.
Bash = Bourne Again Shell
- 리눅스에서 널리 사용되는 명령어 해석기
- 명령어를 직접 실행할 수 있음
- 여러 명령어를 스크립트로 작성해 자동화할 수 있음
셸 스크립트는 여러 리눅스 명령어를 .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
→ 현재 디렉터리의 스크립트 실행
source 차이일반 실행:
./my_script.sh
현재 셸과 별도의 프로세스에서 실행되므로, 스크립트에서 만든 변수나 설정이 실행 후 현재 셸에 남지 않는다.
💡source는 임포트 개념

source my_script.sh
. my_script.sh
일반 실행
→ 새로운 셸에서 실행
→ 변수와 설정이 현재 셸에 남지 않음
source 실행
→ 현재 셸에서 실행
→ 변수, 함수, alias 등의 설정이 현재 셸에 적용됨
환경 설정 파일을 적용할 때 자주 사용한다.
source ~/.bashrc
Bash
→ 리눅스 명령어를 해석하는 셸
Bash Script
→ 여러 명령어를 파일로 만들어 자동 실행
source
→ 스크립트 내용을 현재 셸 환경에 직접 적용


변수 선언 시 = 앞뒤에 공백을 넣으면 안 되고, 사용할 때는 $변수명으로 접근.
name="Alice"
echo "Hello, $name!"
name="Alice" → 변수 저장
$name → 변수 값 사용
${name} → 변수 이름의 범위를 명확히 표현
$(명령어)는 명령어의 실행 결과를 변수에 저장할 때 사용.
hour=$(date +%H)
echo "$hour"
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
[와 ] 양쪽에는 반드시 공백이 필요해.
# 문자열 비교
=, == → 같음
!= → 다름
-z → 문자열이 비어 있음
-n → 문자열이 비어 있지 않음
# 숫자 비교
-eq → 같음
-ne → 다름
-gt → 초과
-ge → 이상
-lt → 미만
-le → 이하
예시:
if [ "$name" = "Alice" ]; then
echo "Hello Alice"
fi
if [ "$age" -ge 20 ]; then
echo "Adult"
fi
-f → 일반 파일이 존재하는지 확인
-d → 디렉터리가 존재하는지 확인
-s → 파일이 존재하고 내용이 있는지 확인
-r → 읽기 가능한지 확인
-w → 쓰기 가능한지 확인
-x → 실행 가능한지 확인
예시:
if [ -f "example.txt" ]; then
echo "파일이 존재합니다."
fi
for 반복문목록의 값을 하나씩 꺼내 반복한다.
for i in 1 2 3 4 5; do
echo "Number: $i"
done
while 반복문조건이 참인 동안 반복한다.
counter=0
while [ "$counter" -lt 5 ]; do
echo "Counter: $counter"
counter=$((counter + 1))
done
자료의 while [ 조건 ]; then은 잘못된 문법이고, then이 아니라 do를 사용해야 함.
$((수식))
→ Bash에서 숫자 계산을 수행하는 문법
반복해서 사용할 코드를 하나의 이름으로 묶는다.
greet() {echo"Hello,$1!"
}
greet"Alice"
greet"Bob"
$1 → 함수에 전달한 첫 번째 값
$2 → 두 번째 값
$# → 전달된 값의 개수
$@ → 전달된 모든 값
파일이 존재하지 않으면 오류 메시지를 출력하고 스크립트를 종료하는 예시.
file="example.txt"if [ !-f"$file" ];thenecho"Error:$file does not exist!"exit1fiecho"$file exists."
! → 조건을 반대로 판단
exit 0 → 정상 종료
exit 1 → 오류로 종료