• 締切済み

BシェルでIPアドレスの入力

お世話になっております。 BシェルでIPアドレス、及び、SUBNETを 入力させるシェルを作成しております。 7桁以上15桁未満は処理しない方法は 分かるのですが 以下処理に困っております。 ・xxx.xxx.xxx.xxxの形式で処理する ⇒ 例) xxx..xxx.xxx.xxは処理しない ・数字以外は処理しない  ⇒ 例) 19a.168.11.1は処理しない 参考になるサイト、及び、情報などありましたら ご教示頂きたく宜しくお願い致します。 ■入力処理 while [ $ENV -eq 0 ]; do echo "IP" read SET_IP echo "SUBNET" read SET_SUBNET echo "IP :" $SET_IP echo "SUBNET:" $SET_SUBNET echo "yes/no" read ans case "$ans" in "yes" | "Yes" | "YES" | "y" | "Y" ) ENV=1 ;; "no" | "No" | "NO" | "n" | "N" ) ENV=0 ;; *) ;; esac done ■入力された値を確認する処理 追記したい処理  xxx.xxx.xxx.xxx形式である事を確認  条件  ⇒ 7桁以上15桁未満である   ⇒ xは数字である   ⇒ xx..xxx.xxx.xxx形式などは処理しない ■ネットワークファイルの書換え ■ネットワークサービスの再起動

みんなの回答

noname#98978
noname#98978
回答No.2

Perlで正規表現を利用すればいいです。 Bシェルに執着する理由はありません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

努力と根性のパターンマッチングとか (苦笑) IFS を変えて処理すると楽になるけどね.

関連するQ&A

  • Kシェルが動作しない。

    Kシェルが動作しない。 以下シェル自体ですが、単体では動作するのですが、メインのシェルから呼び出すと動作しなくなります。 動作しない条件としては、子シェルがメインシェルのwhile文の中に入れていると無限ループ???してしまいます。(for文やそれ以外では動作します。) なにかご存知でしたら、ご教授願います。 ・子シェル(Yes or Noを入力するまで無限ループする) #!/bin/ksh answer= echo "Do you add xxxx ? ---> [y/n]\c" while : do if [ "`echo -n`" = "-n" ]; then echo "$@\c" else echo -n "\@" fi read answer case "${answer}" in [yY] | yes | YES | Yes ) return 0 ;; [nN] | no | NO | No ) return 1 ;; * ) echo "Please enter y or n." ;; esac done ・メインシェル #!/bin/ksh while read line do /xxx/子シェル.ksh done < /xxx/zzz.txt 分かりづらいかも知れませんが、ご容赦願います。

  • シェルスクリプトのYes、Noの入力ロジックに関する質問

    こんにちは。 よろしくお願いします。 Linux(RHEL5)にて、以下のようなシェルスクリプトを作成しました。 ユーザにアンインストールを問い合わせるもので、 yesの時は処理が進み、noの時は処理が中断、 それ以外を入力した場合、再入力を促すようにしています。 echo "" echo "*** アンインストールを実行しますか? ***" read -p "  >>> 実行する場合「yes」、しない場合は「no」を入力してください <<< " YESNO while (test $YESNO != yes) && (test $YESNO != no) do echo "" read -p "  >>> 「yes」もしくは「no」を入力してください <<<  " YESNO done if (test $YESNO == yes) then continue else echo "****** アンインストールをキャンセルしました ******" && exit fi しかし、 何も入力せずに「Enter」を押した場合、 本来なら、再入力を促すように表示したいのですが、 以下のようにエラーが出て、終了してしまいます。 XXX.sh: line YYY: test; !=; unary operator expected XXX.sh: line ZZZ: test; ==; unary operator expected ****** アンインストールをキャンセルしました ****** 恐らくロジックのどこかに見落としがあると思うのですが、 原因がよく分かりません。 よろしくお願いします。

  • シェルスクリプトのYes、Noの入力ロジックに関する質問

    こんにちは。 よろしくお願いします。 Linux(RHEL5)にて、以下のようなシェルスクリプトを作成しました。 ユーザにアンインストールを問い合わせるもので、 yesの時は処理が進み、noの時は処理が中断、 それ以外を入力した場合、再入力を促すようにしています。 echo \"\" echo \"*** アンインストールを実行しますか? ***\" read -p \"  >>> 実行する場合「yes」、しない場合は「no」を入力してください <<< \" YESNO while (test $YESNO != yes) && (test $YESNO != no) do echo \"\" read -p \"  >>> 「yes」もしくは「no」を入力してください <<<  \" YESNO done if (test $YESNO == yes) then continue else echo \"****** アンインストールをキャンセルしました ******\" && exit fi しかし、 何も入力せずに「Enter」を押した場合、 本来なら、再入力を促すように表示したいのですが、 以下のようにエラーが出て、終了してしまいます。 XXX.sh: line YYY: test; !=; unary operator expected XXX.sh: line ZZZ: test; ==; unary operator expected ****** アンインストールをキャンセルしました ****** 恐らくロジックのどこかに見落としがあると思うのですが、 原因がよく分かりません。 よろしくお願いします。

  • Kシェルのreadコマンドについての質問。

    Kシェルのreadコマンドについての質問。 簡単なサンプルですが、以下のように動作させたいのですが、 readコマンドが無視(動作しない)されております。 while read line do echo $line read ans  <--- 実行しても入力を求められない状況です。 echo $ans done < ./xxx 何かご存知でしたら、ご教授下さい。 宜しくお願い致します。

  • Kシェルでgotoのような処理を作成したい。

    Kシェルでgotoのような処理を作成したい。 以下のような処理で、入力した文字が条件と一致しなかった場合、 再度、入力からやり直させるようにしたいです。 以下が例です。 NGになった場合、再入力を促したいです。 #!/bin/ksh echo "Input Moji ---> \c" read ans_Moji if [ ${ans_Moji == "入力した文字" ] ; then echo "OK" else echo "NG"  fi Windowsのようにgoto文があれば、簡単に出来るのですが、 シェルをはじめたばっかりでよく分かっておりません。 何かご存知でしたら、ご教授願います。

  • Bシェルのif文

    if文の否定について教えてください。 if $aa='xxx' then else echo yyy fi 間違っているかもしれませんが上に書いたことをやろうとしています。 他の言語の if(!($aa='xxx'))echo yyy; をBシェルのif文で書くにはどうしたらいいですか? $aa='xxx'を$aa!='xxx'にするのではなくて、その外側のifの書式を教えてください。 最初に書いたコードでは、if(!条件)を知らないので if(条件) else 処理 endif のように書きました。

  • Q>変数をsedで編集する方法

    Bシェル内で変数をsedで編集しようとしているのですがうまくかないので教えてください。 変数SET_NO(=1.2.3-45)から.をとったものを変数EDIT_NOに入れようとしています。 ------------------------------------------------- SET_NO=1.2.3-45 #echo ${SET_NO} | sed -e "s/\.//g" #(0) #echo ${SET_NO} | sed -e "s/\.//g" | read EDIT_NO #(1) echo ${SET_NO} | sed -e "s/\.//g" > EDIT_NO #(2) read -u EDIT_NO #(3) echo "SET_NO=${SET_NO}" echo "EDIT_NO=${EDIT_NO}" ------------------------------------------------- (0)を有効にするとSET_NO=1.2.3-45となりsedはできています。 その結果を変数EDIT_NOに入れようとして(1)にしましたがEDIT_NOには何も入りませんでした。 (2)にしたら、EDIT_NOというファイルができてその中に入ってしまいました。そこで(3)を追加して読み込もうとしましたが read: EDIT_NO: invalid file descriptor specification となって読み込めません。 SET_NO 1.2.3-45から.をとったものをEDIT_NOに入れるにはどうすればいいのでしょうか。教えてください。よろしくお願いします。

  • メッセージを求められるシェルを連続実行

    お世話になります。 現在シェルを作成しています。 既に存在するシェル(100個)を順番に実行するシェルを 作成しようとしています。 しかし、その存在するシェルは実行すると、YES/NO  の確認メッセージに答えないと、進まないようになってい ます。 そのため、確認メッセージに中断されて連続で実行できません。 この確認メッセージで止まらずに連続実行する手段は あるのでしょうか? シェルに詳しい方のご教授ねがいます。 ■既に存在するシェルのメッセージ確認の個所 echo $変数 "実行しますか(確認メッセージ?) [N] => \c" read YN echo " " if [ "$YN" != 'Y' -a "$YN" != 'y' ];then echo ' 実行しません' exit 1 fi

  • IPアドレスの範囲からネットマスクに(サイダー)変換

    124.83.159.146 ~ 124.83.159.185 124.83.159.224 ~ 124.83.159.247 この2つのIP範囲を、 xxx.xxx.xxx.xxx/xx という形式に直したいのですが、 どのようにすればいいのでしょうか?

  • IP固定ができない

    P2P通信のオンラインゲームでルータ開放をしようと思い、まずIPの固定をしようとしたのですができません。 IP固定をした状態でインターネットを開くとページが表示されませんと出てしまいます。 IPがXXX.XXX.XXX.XXXという形式ではなくXXX.XX.XXX.XXXという形式だからでしょうか?

専門家に質問してみよう