이 글은 사실상 고수님들께 조언을 얻고자 올리는 것입니다.

회사에서 각 서버에 뭘 설치해야 하는데 IP, HOSTNAME 등을 인자로 넘겨줘야 합니다. 그런데 HOSTNAME은 바로 처리가 가능하지만, IP의 경우 NIC가 여러개 있다보니 번호로 선택할 수 있도록 bash 스크립트를 만들고 싶더군요.

윈도우에서는 제가 배치파일을 자주 짜다보니 이정도는 쉽게 처리하겠는데, 리눅스는 잘 몰라서 간단한 선택문인데도 만드는데 애를 먹었습니다.

일단 제가 만들어본 스크립트를 한번 봐주세요.

#!/bin/bash

ifconfig | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}' > iplist
numberofips=$(cat iplist | wc -l)

choosenumber() {
    clear
    echo
    echo
    echo "    ==== IP List ===="
    echo

    cat iplist | while read line; do
        let i=i+1
        echo "    $i - $line"
    done

    echo
    echo "    ================="
    echo
    echo -n " Choose the number : "
    read number
}

until [ "$number" -ge "1" -a "$number" -le "$numberofips" ]; do
    choosenumber
done
   
chosenip=$(cat iplist | sed -n "$number"p)

echo
echo
echo " You chose $chosenip"
echo
echo


아래는 실행하고 1을 선택한 결과입니다.



전체적인 동작 방식은

1. IP 리스트를 화면에 뿌려준다.
2. 번호를 선택하도록 한다.
3. 선택한 번호가 1보다 크거나 같고 IP 리스트에 뿌려진 갯수보다 작거나 같은 경우에만 sed로 해당 라인을 뽑아낸다.
   그 외 엉뚱한 숫자나 문자를 입력한 경우 2번 항목으로 다시 되돌아간다.


혹시 좀 더 효율적이거나 안정적인 선택문을 만들 방법이 있다면 조언해주시면 고맙겠습니다.