[개념]

로그를 쌓는 방법 ( >, >> )

로그명에 날짜를 작성할 때 정규식, 쉘 속에서 명령어 호출하기 $(hostname) 이나 `hostname`

 

-------------------

1. 쉘스크립트에서 중괄호 {}의 기본 의미

리눅스 Shell(특히 Bash)에서 {}는 다양한 쓰임새가 있지만, 제가 쓴 예시에서는 **변수 참조(Variable Expansion)**와 경계 표시 용도였습니다.

예시:

bash
LOGFILE="/var/log/myapp.log" echo "[$(hostname)] 서비스 시작" >> "$LOGFILE"

여기서 만약 이런 식으로 쓴다면:

bash
echo "[$(hostname)] 서비스 시작" >> "${LOGFILE}"

  • **${LOGFILE}**는 $LOGFILE와 결과적으로 동일하게 변수의 값을 넣습니다.
  • 하지만 중괄호를 쓰면 변수명과 다른 문자 사이의 경계를 명확하게 구분할 수 있습니다.

예시: 중괄호가 필요한 경우

bash
NAME="test" echo "$NAMEfile" # NAMEfile 변수를 찾으려고 해서 결과 없음 echo "${NAME}file" # testfile (NAME 변수값 + "file")

💡 여기서 중괄호 없으면 Bash가 "NAMEfile"이라는 새로운 변수명으로 인식해버립니다.


2. 중괄호의 다른 기능들

쉘에서는 중괄호가 변수 말고도 다양하게 쓰입니다.

(1) 중괄호 확장 (Brace Expansion)

bash
echo {A,B,C} # A B C echo {1..5} # 1 2 3 4 5 echo file{1..3}.txt # file1.txt file2.txt file3.txt

(2) 코드 블록 그룹핑

bash
{ echo "첫 줄"; echo "둘째 줄"; } > output.txt

  • 중괄호 안의 여러 명령을 하나의 블록처럼 묶어 실행
  • 파이프나 리다이렉션 함께 사용 가능

(3) 변수 치환 연산 (Parameter Expansion)

bash
VAR="Hello" echo "${VAR:-World}" # VAR이 비었으면 "World" 출력 echo "${#VAR}" # 변수 길이 출력 → 5


3. 정리

  • ${변수명} : 변수 값 참조, 변수 경계 모호성 방지
  • { ... } : 명령 블록 또는 반복, 확장 등에 사용
  • Brace Expansion {A,B,C} : 여러 문자열 자동 생성
  • Parameter Expansion ${변수:-값} : 값이 없을 경우 대체값 지정

🔍 제가 보기에, 이번 hostname 예제에서는 ${LOGFILE} 처럼 변수 이름과 뒤에 오는 문자 사이를 구분하기 위해 쓰인 사례입니다.
즉, $변수명 바로 뒤에 문자가 이어지면 반드시 중괄호를 써야 안전합니다.

 


스크립트 예시
#!/bin/bash
 
LOG_DIR="/home/ktadmin/"
 
 
HOST=$(hostname)
 
DATE=$(date +"%Y%m%d")
 
 
LOG_FILE="${LOG_DIR}/${HOST}_${DATE}.log"
 
echo "=============================" >> "$LOG_FILE"
echo " Hostname  : $HOST" >> "$LOG_FILE"
echo " Date/Time : $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
echo "=============================" >> "$LOG_FILE"
 
 
who >> "$LOG_FILE"
 
echo "Finish: $LOG_FILE"

'기타' 카테고리의 다른 글

11. CPU  (0) 2025.08.28
10. Crontab  (0) 2025.08.28
06. FG BG nohup &  (0) 2025.08.28
05. 파일 복사 / 이동  (0) 2025.08.28
04. 파일 권한 및 파일 관리  (2) 2025.08.28

+ Recent posts