1. 변수 (Variable)
리눅스 쉘에서는 변수에 값을 저장할 수 있습니다. 변수를 선언하고 사용할 때는 아래와 같은 방식으로 작성합니다.
변수 선언:
name="John"
변수 사용:
echo $name
이 코드는 **name**이라는 변수에 **John**이라는 값을 저장하고, 그 값을 echo 명령어로 출력합니다.
2. 쌍따옴표 (")와 홑따옴표 (')의 차이
리눅스 쉘에서 문자열을 감쌀 때, 쌍따옴표와 홑따옴표는 서로 다른 동작을 합니다.
2.1. 쌍따옴표 ("):
- 변수 치환과 명령어 치환을 허용합니다. 즉, 문자열 안에 변수를 포함하거나 명령어 결과를 포함할 수 있습니다.
name="John"
echo "Hello, $name"
- 출력: Hello, John
- 설명: 쌍따옴표 안에서는 **$name**이 변수로 치환됩니다.
2.2. 홑따옴표 ('):
- 변수 치환과 명령어 치환을 허용하지 않습니다. 즉, 따옴표 안의 내용은 그대로 출력됩니다.
name="John"
echo 'Hello, $name'
- 출력: Hello, $name
- 설명: 홑따옴표 안에서는 **$name**이 변수로 해석되지 않고, 텍스트 그대로 출력됩니다.
2.3. 따옴표 결합 사용:
변수와 고정 문자열을 함께 사용할 때는 두 가지 따옴표를 결합해서 사용할 수 있습니다.
name="John"
echo "Hello, $name's computer"
- 출력: Hello, John's computer
- 설명: 변수 **$name**은 치환되고, 's computer 부분은 문자열로 그대로 출력됩니다.
3. 파이프 (|)
파이프는 한 명령어의 출력을 다른 명령어의 입력으로 전달하는 기능을 합니다. 즉, 파이프를 사용하면 여러 명령어를 연속으로 실행할 수 있습니다.
예시:
echo "Hello World" | grep "World"
- 출력: Hello World
- 설명: echo 명령어가 출력한 문자열을 grep 명령어에 전달하여, **World**가 포함된 줄을 출력합니다.
4. 명령어 치환 ($(...))
리눅스에서는 명령어 치환을 사용하여 명령어의 결과를 변수에 저장하거나 다른 명령어에서 사용할 수 있습니다. 명령어 치환은 $(...) 문법을 사용합니다.
예시:
current_date=$(date)
echo "Today's date is $current_date"
- 출력: Today's date is (현재 날짜)
- 설명: **$(date)**는 date 명령어의 결과를 변수 **current_date**에 저장하고, 이 값을 **echo**로 출력합니다.
5. grep
**grep**은 특정 문자열을 파일이나 출력된 텍스트에서 검색하는 명령어입니다. 다양한 옵션을 제공하여 검색 조건을 설정할 수 있습니다.
기본 사용법:
echo "Hello World" | grep "World"
- 출력: Hello World
- 설명: **grep "World"**는 입력된 텍스트에서 **World**가 포함된 줄을 찾아 출력합니다.
-q 옵션 (quiet mode) :
- -q 옵션을 사용하면 검색 결과를 출력하지 않고, 검색 성공 여부만 확인합니다.
echo "Hello World" | grep -q "World"
- 출력 없음 (성공 여부만 반환)
- 설명: **grep -q**는 검색된 내용이 있을 때는 성공(0)을 반환하고, 없을 때는 실패(1)를 반환합니다.
6. 변수와 따옴표를 사용하는 이유
쌍따옴표로 변수를 감싸는 이유:
변수를 사용하여 데이터를 처리할 때는 가능한 쌍따옴표로 감싸는 것이 좋습니다. 이는 공백이나 특수 문자가 포함된 값을 안전하게 처리할 수 있도록 해줍니다.
예시:
name="John Doe"
echo $name # 출력: John Doe (공백이 하나로 축소될 수 있음)
echo "$name" # 출력: John Doe (원래 공백 유지)
- 설명: 쌍따옴표 없이 변수를 사용할 경우, 값에 포함된 공백이 잘못 처리될 수 있습니다. 쌍따옴표를 사용하면 공백이 그대로 유지됩니다.
7. -r 옵션 (raw output mode)
- **-r**는 raw의 약어입니다.
- jq 명령어에서 사용되며, raw 모드는 데이터를 원시 형태로 출력하는 것을 의미합니다.
- 기본적으로 jq는 JSON 데이터를 따옴표로 감싸서 출력하는데, -r 옵션을 사용하면 이 따옴표를 제외한 순수 데이터를 출력합니다.
사용 예시:
echo '{"cert": "sample_certificate"}' | jq -r '.cert'
- 출력: sample_certificate
- 설명: **jq -r '.cert'**는 cert 필드의 값을 따옴표 없이 출력합니다. -r 옵션을 사용하지 않으면 값이 따옴표로 감싸져 출력됩니다.
8. jq (JSON Query)
- **jq**는 JSON Query의 약어입니다.
- JSON 데이터를 다룰 때 사용되는 도구로, JSON 형식의 데이터를 파싱하고 필요한 값을 추출하거나 변환할 수 있습니다.
- jq는 JSON 데이터 안에서 특정 필드를 선택하거나, 그 값을 가공하는 데 매우 유용합니다.
기본 사용법:
echo '{"key": "value"}' | jq '.key'
- 출력: "value"
- 설명: **jq '.key'**는 JSON 데이터에서 **key**라는 필드의 값을 추출합니다.
jq의 추가 예시 (필터링 및 포맷팅):
echo '[{"name": "Alice"}, {"name": "Bob"}]' | jq '.[].name'
- 출력:
- 설명: JSON 배열에서 name 필드를 각각 출력합니다.
"Alice"
"Bob"
-r 옵션과 함께 사용하는 예시:
echo '{"cert": "sample_certificate"}' | jq -r '.cert'
- 출력: sample_certificate
- 설명: -r 옵션을 사용하면 JSON 필드의 값이 따옴표 없이 출력됩니다.
9. curl
- **curl**은 Client URL의 약어로, 리눅스에서 다양한 프로토콜을 사용해 데이터를 전송할 수 있는 도구입니다.
- 주로 HTTP, HTTPS 요청을 보내 API 서버와 통신하거나 파일을 다운로드하는 데 사용됩니다.
기본 사용법:
curl https://example.com
- 출력: 웹 페이지의 HTML 코드 출력
- 설명: **curl**은 지정한 URL로 HTTP 요청을 보내고, 그 응답을 출력합니다.
JSON 데이터를 가져오는 예시:
curl -X GET "https://api.example.com/data"
- 설명: **curl**은 GET 요청을 보내서 API 서버로부터 JSON 데이터를 가져옵니다.
요약
리눅스에서 쉘 스크립트를 작성할 때, 쌍따옴표와 홑따옴표, 파이프, 명령어 치환 등을 적절히 사용하면 복잡한 작업을 쉽게 처리할 수 있습니다. 각 기능의 차이를 잘 이해하고, 안전하게 스크립트를 작성하는 것이 중요합니다.
옵션 및 도구 정리:
- -q (quiet): grep에서 사용하며, 출력 없이 성공 여부만 반환합니다.
- -r (raw output): jq에서 사용하며, JSON 필드를 원시 값으로 출력합니다.
- jq (JSON Query): JSON 데이터를 파싱하고 가공하는 도구입니다.
- curl (Client URL): 다양한 프로토콜을 사용해 데이터를 전송하는 도구입니다.
- grep (Global Regular Expression Print): 텍스트에서 특정 패턴을 찾고 출력하는 명령어입니다.
'임베디드 관련 카테고리 > Linux command' 카테고리의 다른 글
chmod 권한의 의미와 숫자 표현 (1) | 2024.10.26 |
---|---|
우분투 스크립트로 2년 뒤의 날짜 계산하기 (0) | 2024.10.03 |
[Linux, Ubuntu] awk 명령어로 개행 없이 한 줄로 파일 읽기 (1) | 2024.10.02 |
로컬에서 패키지 설치 및 실행 스크립트 작성: wget, dpkg, echo, cat의 이해 (2) | 2024.09.28 |
리눅스에서 cat과 echo의 차이점과 공통점 (0) | 2024.09.27 |
댓글