회사에서 리눅스 서버를 여러 대 관리하다 보면, 단순한 쉘 스크립트만으로는 사용자 입력을 받거나, 실수 없이 설정을 진행하는 게 쉽지 않더라고요. 특히, 누군가에게 서버 초기 세팅을 맡길 때는 더더욱 그렇죠.
그래서 "쉘 환경에서 입력을 제한하고, 사용성을 높일 수 있는 메뉴 UI가 없을까?" 고민하다가, 별도의 설치 없이 기본적으로 제공되는 whiptail
이라는 명령어를 알게 됐습니다.
사실 처음엔 "이런 게 정말 쓸모 있을까?" 싶었는데, 막상 써보니 생각보다 유용해서, 오늘은 그 경험을 공유해보려 합니다.
whiptail 기능 상세 소개
whiptail이란?
whiptail
은 리눅스/유닉스 환경에서 대화형 텍스트 기반 UI(메뉴, 입력창 등)를 쉽게 만들 수 있는 명령어입니다.
별도의 설치 없이 대부분의 배포판에 기본 포함되어 있고, dialog
와 비슷하지만 더 가볍고, 스크립트에서 사용하기 딱 좋습니다.
- 주요 기능
- 메뉴 선택(라디오/체크박스)
- 텍스트 입력/비밀번호 입력
- 메시지/경고창
- 진행바 등
간단한 샘플 코드 – 메뉴 선택 후 값 표시
아래는 whiptail로 간단한 메뉴를 만들고, 사용자가 선택한 값을 출력하는 예시입니다.
#!/bin/bash
CHOICE=$(whiptail --title "메뉴 선택" --menu "원하는 작업을 선택하세요:" 15 60 4 \
"1" "메뉴1" \
"2" "메뉴2" \
"3" "종료" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "선택한 메뉴: $CHOICE"
else
echo "취소하셨습니다."
fi
- 설명
--menu
옵션으로 메뉴 UI 생성- 선택 결과는 변수
CHOICE
에 저장 - 사용자가 [취소]를 누르면 exit status로 구분
실전 샘플 – PC 초기 세팅 자동화 스크립트
이번엔 실제로 많이 쓰는 "PC 초기 세팅"용 whiptail 스크립트 예시입니다.
호스트네임 변경, 네트워크(고정 IP) 설정을 메뉴로 선택해서 진행할 수 있습니다.
#!/bin/bash
while true; do
CHOICE=$(whiptail --title "PC 초기 세팅" --menu "실행할 작업을 선택하세요:" 15 60 4 \
"1" "호스트네임 변경" \
"2" "네트워크 설정(고정 IP)" \
"3" "종료" 3>&1 1>&2 2>&3)
[ $? -ne 0 ] && break
case $CHOICE in
1)
NEW_HOSTNAME=$(whiptail --inputbox "새 호스트네임을 입력하세요:" 10 60 --title "호스트네임 변경" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ] && [ -n "$NEW_HOSTNAME" ]; then
hostnamectl set-hostname "$NEW_HOSTNAME"
whiptail --msgbox "호스트네임이 $NEW_HOSTNAME(으)로 변경되었습니다." 8 60
fi
;;
2)
IP=$(whiptail --inputbox "고정 IP 주소를 입력하세요:" 10 60 --title "네트워크 설정" 3>&1 1>&2 2>&3)
GATEWAY=$(whiptail --inputbox "게이트웨이 주소를 입력하세요:" 10 60 --title "네트워크 설정" 3>&1 1>&2 2>&3)
DNS=$(whiptail --inputbox "DNS 주소를 입력하세요:" 10 60 --title "네트워크 설정" 3>&1 1>&2 2>&3)
IFACE=$(whiptail --inputbox "설정할 인터페이스명(예: eth0):" 10 60 --title "네트워크 설정" 3>&1 1>&2 2>&3)
if [ -n "$IP" ] && [ -n "$GATEWAY" ] && [ -n "$DNS" ] && [ -n "$IFACE" ]; then
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$IFACE
DEVICE=$IFACE
BOOTPROTO=static
ONBOOT=yes
IPADDR=$IP
GATEWAY=$GATEWAY
DNS1=$DNS
EOF
systemctl restart network
whiptail --msgbox "네트워크 설정이 완료되었습니다." 8 60
fi
;;
3)
break
;;
esac
done
- 설명
- 반복 메뉴로 여러 작업을 연속 처리 가능
- 각 단계마다 입력값을 받아 실제 시스템 설정에 반영
- 실수 방지 및 자동화에 유용
⚠️ 주의: 네트워크 설정 부분은 배포판(예: Ubuntu, CentOS 등)에 따라 경로/명령이 다를 수 있으니, 실제 환경에 맞게 수정 필요!
장단점과 실무 팁
- 장점
- 별도 설치 없이 바로 사용 가능
- 스크립트에 UI를 더해 실수 방지
- 반복 작업 자동화에 적합
- 아쉬운 점
- GUI가 아니라서 한글 입력/출력에 제한이 있을 수 있음
- 복잡한 UI는 한계가 있음
- 실무 팁
- 메뉴/입력값 검증 로직을 꼭 추가할 것
- sudo/root 권한이 필요한 명령은 주의
- 테스트 환경에서 충분히 검증 후 실서비스 적용
마치며
whiptail은 "쉘 스크립트도 사용자 친화적으로 만들 수 있다"는 걸 보여주는 좋은 도구입니다.
특히, IT 관리자라면 반복되는 서버 세팅이나, 실수 방지가 중요한 작업에 whiptail을 한 번쯤 적용해보시길 추천합니다.
앞으로 더 복잡한 자동화에도 도전해보고, 실무에서 겪은 시행착오와 개선점을 계속 공유해볼게요!
'IT 관리 노하우 > 서버 & Linux' 카테고리의 다른 글
우분투 운영체제 보안패치 스크립트(USPS) (0) | 2025.06.03 |
---|---|
리눅스 서버의 관리자 계정을 잊어버렸어요! (0) | 2024.11.16 |
자주쓰는 Linux/Ubuntu 명령어 (1) | 2024.11.13 |