[개념]
로그를 쌓는 방법 ( >, >> )
로그명에 날짜를 작성할 때 정규식, 쉘 속에서 명령어 호출하기 $(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 |