入力オプションが間違っている場合のbashエラーからメニューを作成する方法

入力オプションが間違っている場合のbashエラーからメニューを作成する方法

このメニューがありますが、テキストを間違って入力した場合、ユーザーに誤ったオプションを指定すると機能しません。

if  [ -n "$1" -a -n "$2" -a -f "$1" ]
then

dts=($(cat $1 | cut -d: -f$2))

        for i in ${!dts[@]}
        do
                echo "$i) ${dts[$i]} "
        done

        read   -p "Select a user to delete: " OKSELUSRGRP
        p=$( echo $OKSELUSRGRP | grep -E ^[0-${#dts[@]}]$ )

                if [  -n "$p" ]
                then
                OKSELUSRGRP=${dts[$p]}
                else
                OKSELUSRGRP=""
                fi

else
        echo "Error, select a correct option"
        sleep 1
fi

どんなアイデアがありますか?

ありがとうございます!

答え1

スクリプトが何をしているのかよくわかりませんが、おそらくこのようなことを試してみてください。

if  [ -n "$1" -a -n "$2" -a -f "$1" ]; then
    dts=($(cat $1 | cut -d: -f$2))
        for i in ${!dts[@]}; do
            echo "$i) ${dts[$i]} "
        done
        read -p "Select a user to delete: " OKSELUSRGRP
        p=$(echo $OKSELUSRGRP | grep -E ^[0-${#dts[@]}]$)
        while [ -z "$p" ]; do
            echo "Error, select a correct option"
            sleep 1
            read -p "Select a user to delete: " OKSELUSRGRP
            p=$(echo $OKSELUSRGRP | grep -E ^[0-${#dts[@]}]$)
        done
    OKSELUSRGRP=${dts[$p]}
else
        echo "
Usage: $0 [file] [something else]   

$0 can be used to select users or something.
"
fi

関連情報