bash - 1行ずつ対話式に変更

bash - 1行ずつ対話式に変更

私は初めてbashスクリプトに触れました。ユーザーにファイルを1行ずつ編集するようにデータを要求するインタラクティブスクリプトを作成したいと思います。

シナリオ: - ファイルを読み取り、各行を繰り返すには、次のようにします。for in

  • ユーザーに行を編集するかどうかを尋ねます。

  • その場合は修正してください。

  • それ以外の場合は、次の行に進みます

  • すべての操作が完了したら、対話を終了します。

私のアプローチ:

# --> get file contents and convert them to an array
readarray thearray < ips.info

# --> Iterate the array and do interactive editing
for item in ${!thearray[@]}; do
 if [[ "$item" == 0 ]]; then
    echo -e "First line: ${thearray[$item]}. Change this line? (y/n)"
    read Useranswer
    if [ $Useranswer = y]; then
        echo "Please type any string:"
        read Firststring    
    elif [ $Useranswer = n]; then
        # not sure what to write here to resume 
    fi
fi
done
echo "Everything done!"

n上記のコードに問題がありますか?ユーザーがキーボードを押すとどのように回復できますか?

ベストアンサー1

使用できるアクションなしコマンド(何もしません)はシェルで次のようになります。:

elif [ $Useranswer = n]; then
    : 
fi

exitそれ以外の場合は、スクリプトを終了するこのコマンドを使用できます。コマンドの終了状態の範囲は 0 ~ 255 です。これは成功のみをexit 0意味し、他のすべての終了ステータスコードは何らかの失敗を説明します(必要ではありません)。または、次のことができます。

elif [ $Useranswer = n]; then
    exit 0
fi

ただし、この場合、終了はこの時点でスクリプトを終了するため、スクリプトの残りの部分は実行されません。たとえば、ユーザーが「n」を押すと、次の出力が得られません。echo "Everything done!

おすすめ記事