現在、BASHで小さなスクリプトを作成しており、ユーザーに新しいIPアドレス、サブネット、ゲートウェイを入力するように求めています。その入力は、/ etc / network/interfaceに書き込まれるファイルに送られます。
スクリプトは機能しましたが、防弾ではありません。
ユーザーが入力したのが数字ではなく英字の場合、それが返され、ユーザーはもう一度数字を入力する必要があります。ユーザーがまだ英字を使用している場合、エラーが発生してもスクリプトは続行されます。
私のコード:
echo "Fill in your IP"
read NEW_IP
oldIFS=$IFS
IFS=.
set -- $NEW_IP
while [ $# -ne "4" ]; do
echo "Must have 4 parts"
read NEW_IP
set -- $NEW_IP
done
for oct in $1 $2 $3 $4; do
echo $oct | egrep "^[0-9]+$" >/dev/null 2>&1
while [ "$?" -ne "0" ]; do
echo "$oct is not numeric. fill your IP in the correct format;"
read NEW_IP
set -- $NEW_IP
done
私はbashを初めて使用しますが、上記では自分で作成しませんでした。このスクリプトはインターネットで見つけました。しばらくの間、私はそれを自分でループとして作りました。ユーザーが間違った番号を入力するたびに、ユーザーが正しい形式で入力するまで戻る必要があります。
本当の問題はコードの後半にあります。10.10.10.aのような間違ったIPを入力すると、希望どおりのエラーが発生し、2回目のIPを入力する必要があります。10.41.12.rと入力するとエラーが発生しましたが、今回は最後のrについては文句を言わず、最初に挿入したaについては文句を言います。10.41.12はチェックされますが、その最後の文字は異なります。
すべてがメモリに保存されることは想像できますが、どうすればそれをクリアできますか?unsetまたは$oct=
は機能しません
誰かがこれで私を助けてくれることを願っています。プログラミングは初めてですが、これは私に頭痛の種を与えています
ありがとう。
デイブ