쉘 스크립트는 리눅스 명령어와 다양한 프로그래밍 구조를 사용하여 작성된 스크립트이다.
이를 사용하면 여러 명령어를 한 번에 실행하고 조건문, 반복문 등을 활용하여 자동화된 작업을 수행할 수 있다.
스크립트 파일은 일반적으로 텍스트 파일이며, 특정 규칙에 따라 작성한다.
아래 코드는 Red Hat 버전에 따라 Network Restart 명령어를 다르게 실행하는 쉘 스크립트이다.
Red Hat 7 버전 이상일 경우 # systemctl restart network
명령어를 실행하고,
6버전 이하일 경우 # service network restar
명령어가 실행된다.
#!/bin/bash
# Red Hat 버전 확인
redhat_version=$(cat /etc/redhat-release | grep -oE '[0-9]+' | head -1)
echo "Red Hat 버전: $redhat_version"
# Red Hat 7 이상인 경우
if [ "$redhat_version" -ge 7 ]; then
systemctl restart network
echo "네트워크가 재시작되었습니다."
else
# Red Hat 6 이하인 경우
service network restart
echo "네트워크가 재시작되었습니다."
fi
아래 코드는 # lshw
명령어를 이용하여 하드웨어 정보를 출력하기 위한 스크립트로,
lshw 패키지가 없을 경우 설치를 시도하고, 설치가 실패하면 오류가 발생했다는 메시지를 출력한다.
그 후 패키지가 설치되어 있으면 # lshw
명령어를 실행한다.
#!/bin/bash
# lshw 명령어 설치 여부 확인
if ! command -v lshw &> /dev/null; then
echo "lshw 명령어가 설치되어 있지 않습니다. 설치 중..."
yum install -y lshw
if [ $? -eq 0 ]; then
echo "lshw 명령어 설치 완료!"
else
echo "lshw 명령어를 설치하는 중 오류가 발생했습니다."
exit 1
fi
fi
# 하드웨어 정보 출력
echo "===== 하드웨어 정보 ====="
lshw
아래 스크립트는 실행할 경우 현재 활성화되어 있는 네트워크 인터페이스 목록을 보여준다.
인덱스 번호를 입력하여 인덱스에 해당하는 네트워크 인터페이스를 # vi
에디터로 오픈한다.
네트워크 설정이 끝난 후 md5sum 값을 비교하여 파일의 수정 유무를 확인한다.
그 후 q 키로 대화를 빠져나갈 경우 네트워크 재시작 유무를 물어보고, 파일이 수정될 경우 해당 인터페이스만 재시작된다.
#!/bin/bash
# 네트워크 설정 스크립트
echo "네트워크 설정을 시작합니다."
declare -a modified_interfaces # 배열 선언: 수정된 인터페이스를 저장
while true; do
# 인터페이스 리스트 표시
interfaces=$(ls /etc/sysconfig/network-scripts/ifcfg-* | awk -F'[-]' '{print $3}')
echo "사용 가능한 인터페이스:"
# 인터페이스 목록에 번호 붙이기
index=1
for iface in $interfaces; do
echo "$index. $iface"
((index++))
done
# 사용자로부터 숫자로 된 선택 입력 받기
read -p "설정할 인터페이스의 번호를 입력하세요 (q로 종료): " interface_number
# 종료 조건 확인
if [ "$interface_number" == "q" ]; then
# 수정된 인터페이스가 존재하면 네트워크 재시작 여부 묻기
if [ ${#modified_interfaces[@]} -gt 0 ]; then
read -p "수정된 인터페이스에 대해 네트워크를 다시 시작하시겠습니까? (y/n): " restart_network
if [ "$restart_network" == "y" ]; then
for iface in "${modified_interfaces[@]}"; do
sudo ifdown $iface
sudo ifup $iface
echo "$iface 인터페이스에 대한 네트워크가 다시 시작되었습니다."
done
fi
fi
break
fi
# 선택한 인터페이스 이름 가져오기
selected_interface=$(echo "$interfaces" | sed -n "${interface_number}p")
config_file="/etc/sysconfig/network-scripts/ifcfg-$selected_interface"
# 현재 파일의 md5 해시값 가져오기
current_md5=$(md5sum $config_file | awk '{print $1}')
# 선택한 인터페이스 설정 파일이 존재하는지 확인
if [ -e $config_file ]; then
# 설정 파일이 존재하면 해당 파일을 vi 에디터로 열기
sudo vi $config_file
# 파일이 변경되었는지 확인
new_md5=$(md5sum $config_file | awk '{print $1}')
if [ "$current_md5" != "$new_md5" ]; then
# 수정된 인터페이스를 배열에 추가
modified_interfaces+=($selected_interface)
echo "네트워크 설정 파일이 변경되었습니다."
else
echo "네트워크 설정 파일이 변경되지 않았습니다."
fi
else
echo "선택한 인터페이스의 설정 파일이 존재하지 않습니다."
fi
done