ループが grep を読み取って文字列を探している間、ファイル全体を読み取らず、最初の失敗時に終了します。

ループが grep を読み取って文字列を探している間、ファイル全体を読み取らず、最初の失敗時に終了します。

テーブルファイルを読み込み、文字列を検索するスクリプトがあります。文字列が見つかったら、見つかった行を解析していくつかの操作を実行する必要があります。文字列が最初に見つからなかった場合、スクリプトは終了します。 (ファイルの最初の行。)テーブルファイルの形式は次のとおりです。

10.1.1:0.0:lan:hq:3:254:br0:.1.16:.1.1:.1.21:.1.23:hq:eoc:hq

変数定義($ ipと$ ipad)とロギングとデバッグ機能はwhileループの前にあります。読みにくい項目(デバッグ、ロギング、コメントなど)をすべて抽出しました。 whileループは次のとおりです。

line=$(grep ${ipad} {$net})
    if [ -z ${line}]; then
    base=$(echo ${ip}|awk -F"." '{print $1"."$2}')
    mask=$(echo ${line}|awk -F":" '{print $2}')
    zone=$(echo ${line}|awk -F":" '{print $3}')
    loc=$(echo ${line}|awk -F":" '{print $4}')
    low=$(echo ${line}|awk -F":" '{print $5}')
    high=$(echo ${line}|awk -F":" '{print $6}')
    bri=$(echo ${line}|awk -F":" '{print $7}')
    bftp=$(echo ${line}|awk -F":" '{print $8}')
    ftp=${base}${bftp}
    bgate=$(echo ${line}|awk -F":" '{print $9}')
    gate=${base}${bgate}
    bns=$(echo ${line}|awk -F":" '{print $10}')
    bns1=$(echo ${line}|awk -F":" '{print $11}')
    if [[ ${loc} == "var1" && ${zone} == "var2" ]]; then 
        ns=10.10${bns}
        ns1=10.10${bns1}
    else
        ns=${base}${bns}
        ns1=${base}${bns1}
    fi
    if [[ ${loc} == "var3" && ${zone} == "var2" ]]; then
        ns=10.1${bns}
        ns1=10.1${bns1}
    else
        ns=${base}${bns}
        ns1=${base}${bns1}
    fi
    tld=$(echo ${line}|awk -F":" '{print $12}')
    tld1=$(echo ${line}|awk -F":" '{print $13}')
    com=$(echo ${line}|awk -F":" '{print $14}')
        if [ -f ${iptab} ]; then
            spc=$(cat ${iptab})
            tab=${zone}-${spc}.${loc}
        else
            tab=${zone}.${loc}
        fi
        # If no RAM size is given use 1GB
                if [ -z $ram ]; then
                        ram=1024
                fi
                # If no disk size is given use 10GB
                if [ -z $mem ]; then
                        mem=10
                fi
    #Then Do Some stuff with that info

    else
        log "IP address given does not match any of the IP Network blocks. Please check the address and try again."
        if [ -f ${korg} ]; then 
            mv ${korg} ${ksin}
        fi
        exit 0          
    fi

ログ出力では、whileループが最初の行で文字列を見つけることができず、終了することがわかります。文字列の最初の行を含むスクリプトにパラメータを渡すと、whileループはすべてを実行してから終了せずに2行目を試みます。完全に混乱しています。

ベストアンサー1

ループの先頭で、行にいくつかのデータが含まれていることを確認します。

if echo ${line}|grep ${ipad}; then

elseこのポイントはif次から始まります。

exit 0

これがスクリプトが停止する場所と理由です。

おすすめ記事