Shell script - Linux 에서 ini 프로필 분석

5623 단어
안내 문
  • Linux 는 가끔 위의 데이터 가 필요 합 니 다. 예 를 들 어 N 다 중 호스트 의 로 그 를 합병 한 다음 에 다음 단계 의 분석 을 해 야 합 니 다.이때 IP 에 서 는 다음 에 호스트 한 대 를 추가 하면 스 크 립 트 를 수정 해 야 합 니 다. 여러 스 크 립 트 와 관련 되면 이러한 작업 은
  • 이 럴 때 사용 하 는 호스트 목록 을 파일 에 설정 한 다음 에 하나의 함수 로 해석 하 는 것 을 고려 할 수 있 습 니 다. 나중에 수정 하면 이 프로필 만 수정 하면 됩 니 다
  • 물론 공공 스 크 립 트 에 포 장 된 스 크 립 트 를 처리 할 수 있 습 니 다. 우 리 는 이 를 하나의 단독 명령 으로 포장 할 수 있 습 니 다. 상세 한 것 은 마지막 부분 을 맞 춤 형 도구
  • 로 참조 하 십시오.
    공용 함수 스 크 립 트
    listIniSections
    Desc:
                    section  
    Usage:
          listIniSections ini-config-file
    

    listIniKeys
    Desc:
                     section     key  
    Usage:
          listIniSections ini-config-file section-name
    

    listIniValues
    Desc:
                     section     value  
    Usage:
          listIniSections ini-config-file section-name
    

    listIniKeysValues
    Desc:
                     section     key   value  
    Usage:
          listIniSections ini-config-file section-name
    

    각본
    ##          ,          ,             
    ##               
    vim /devOps/shell/common/functions
    
    #!/usr/bin/env bash 
    ##
    ## 2016-05-12
    ##   ini       sections  
    ## listIniSections "filename.ini"
    ##
    listIniSections()
    {
        inifile="$1"
        # echo "inifile:${inifile}"
        # # exit
        if [ $# -ne 1 ] || [ ! -f ${inifile} ]
        then
            echo  "file [${inifile}] not exist!"
            exit 
        else
            sections=`sed -n '/\[*\]/p' ${inifile}  |grep -v '^#'|tr -d []`
            echo  "${sections}"
        fi
    }
    
    ##
    ## 2016-05-12
    ##   ini      section   key 
    ## ini   section     
    ## listIniSections "filename.ini" "section"
    ## 
    listIniKeys()
    {
        inifile="$1"
        section="$2"
        if [ $# -ne 2 ] || [ ! -f ${inifile} ]
        then
            echo  "ini file not exist!"
            exit 
        else
            keys=$(sed -n '/\['$section'\]/,/^$/p' $inifile|grep -Ev '\[|\]|^$'|awk -F'=' '{print $1}')
            echo ${keys}
        fi
    }
    
    ##
    ## 2016-05-12
    ##   ini      section   value 
    ## ini   section     
    ## listIniSections "filename.ini" "section"
    ## 
    listIniValues()
    {
        inifile="$1"
        section="$2"
        if [ $# -ne 2 ] || [ ! -f ${inifile} ]
        then
            echo "ini file [${inifile}]!"
            exit 
        else
            values=$(sed -n '/\['$section'\]/,/^$/p' $inifile|grep -Ev '\[|\]|^$'|awk -F'=' '{print $2}')
            echo ${values}
        fi
    }
    
    ## 2016-06-01
    ##   ini      section   key - value 
    ## ini   section     
    ## listIniSections "filename.ini" "section"
    ## 
    listIniKeysValues()
    {
        inifile="$1"
        section="$2"
        if [ $# -ne 2 ] || [ ! -f ${inifile} ]
        then
            echo "ini file [${inifile}]!"
            exit 
        else
            values=$(sed -n '/\['$section'\]/,/^$/p' $inifile|grep -Ev '\[|\]|^$'|awk -F'=' '{print $1, $2}')
            echo ${values}
        fi
    }
    

    구체 적 인 실례
    ini 형식 프로필
    root@pts/2 $ cat hostList.ini 
    [juepei]
    web1=192.168.88.2
    web2=192.168.88.15
    
    [miaowu]
    web1=192.168.200.2
    web2=192.168.200.3
    

    테스트 스 크 립 트
    root@pts/0 $ cat 20160620.sh 
    #!/usr/bin/env bash 
    
    source /devOps/shell/common/functions
    iniconfig="/tmp/liuchao/hostList.ini"
    
    echo "list all sections"
    listIniSections ${iniconfig}
    
    echo -e "
    list section [juepei] keys" listIniKeys ${iniconfig} juepei echo -e "
    list section [juepei] values" listIniValues ${iniconfig} juepei echo -e "
    list section [miaowu] keys and values" listIniKeysValues ${iniconfig} juepei

    테스트 결과
    root@pts/0 $ bash 20160620.sh 
    list all sections
    juepei
    miaowu
    
    list section [juepei] keys
    web1 web2
    
    list section [juepei] values
    192.168.88.2 192.168.88.15
    
    list section [miaowu] keys and values
    web1 192.168.88.2 web2 192.168.88.15
    

    맞 춤 형 도구 로 삼다
    #!/usr/bin/env bash
    # -*- coding: utf-8 -*-
    #Filename:  lc_parseINI
    #Author:        Liuchao
    #Email:     [email protected]
    #Date:      2016-06-20
    #Desc:      Linux   INI        
    #
    
    source /devOps/shell/common/functions
    
    echo "$1 - $2 - $3"
    ##                  2     
    if [ $# -gt 3 ] || [ $# -lt 1 ]
    then 
        echo "Usage:`basename $0` [-s/-k/-v/-a] iniconfig [section]"
        exit
    else
        # param1="$1"
        # if [ $# -eq 1 ] && [ "${param1:0-3}" = "ini" ]
        if [ $# -eq 1 ] && [ "${1:0-3}" = "ini" ]
        then
            listIniSections "$1"
        elif [ $# -eq 2 ] && [ "$1" = "-s" ]
        then
            listIniSections "$2"
        elif [ $# -eq 3 ] && [ "$1" = "-s" ]
        then
            listIniSections "$2"
        elif [ $# -eq 3 ] && [ "$1" = "-a" ]
        then
            listIniKeysValues "$2" "$3"
        elif [ $# -eq 3 ] && [ "$1" = "-k" ]
        then
            listIniKeys "$2" "$3"
        elif [ $# -eq 3 ] && [ "$1" = "-v" ]
        then
            listIniValues "$2" "$3"
        else
            echo "You enter wrong params!"
            echo "Usage:`basename $0` [-s/-k/-v/-a] iniconfig section"
            exit
        fi
    fi
    

    좋은 웹페이지 즐겨찾기