쉘 스크립트란

김재현·2024년 1월 5일
0

Shell Scripts

목록 보기
1/2
post-thumbnail

Shell Scripts

쉘 스크립트는 리눅스 명령어와 다양한 프로그래밍 구조를 사용하여 작성된 스크립트이다.
이를 사용하면 여러 명령어를 한 번에 실행하고 조건문, 반복문 등을 활용하여 자동화된 작업을 수행할 수 있다.
스크립트 파일은 일반적으로 텍스트 파일이며, 특정 규칙에 따라 작성한다.

Example1 - Red Hat 버전

아래 코드는 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

Example2 - 패키지 설치 확인 및 실행

아래 코드는 # 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

Example3 - 네트워크 설정을 대화형으로

아래 스크립트는 실행할 경우 현재 활성화되어 있는 네트워크 인터페이스 목록을 보여준다.
인덱스 번호를 입력하여 인덱스에 해당하는 네트워크 인터페이스를 # 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

0개의 댓글