こんばんは。
shellを書いておりましたが、
ワイルドカードの部分で躓いてしまいましたので、
なにとぞご教授頂ければと思います。
【シェルの内容】
IPアドレスを入力。
IPアドレスの範囲が[0-255].[0-255].[0-255].[0-255]であれば"OK"を表示
このワイルドカードの部分がうまく判定されないのです。
よろしくお願いします。
#/bin/sh
echo -n "To what is IPaddress set ? "
read IPADDR
if [[ [0-255].[0-255].[0-255].[0-255] = $IPADDR ]]
then
echo -n "OK!"
fi
exit 0
No.1
- 回答日時:
そもそもシェルのワイルドカードで数値の範囲比較はできません。
ワイルドカードでやるとすると、各パートが1桁の場合、2桁の場合、3桁で000-199台の場合、200-249の場合、250-255の場合をそれぞれ書かないといけないので、5x5x5x5=625 と625通りのパターンを書かないといけません。また、bash拡張機能の [[ ]] 中でワイルドカード比較をするのは = でなく == です。
文字列を . で分解して、各パーツを数値比較する必要があります。expr、test を組み合わせて使うか、awk や perl 等を使うかしないと難しいでしょう。
No.2ベストアンサー
- 回答日時:
expr と test を使うとすると、
read A
A1=`expr "$A" : '\([0-9]\+\)\.'`
A2=`expr "$A" : '[0-9]\+\.\([0-9]\+\)\.'`
A3=`expr "$A" : '[0-9]\+\.[0-9]\+\.\([0-9]\+\)\.'`
A4=`expr "$A" : '[0-9]\+\.[0-9]\+\.[0-9]\+\.\([0-9]\+\)$'`
if test -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" &&
test "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255
then echo OK
else echo NG
fi
この回答への補足
ご回答ありがとうございます。
すみません。もう1点質問させてください。
if test -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" &&
test "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255
の部分をNot(否定)で書くとどのようになりますか?
ご教授のほどよろしくお願いします。
No.3
- 回答日時:
>の部分をNot(否定)で書くとどのようになりますか?
if で使うなら、then 部分と else 部分の内容を逆に書けばいいです。then 部分が空になるなら : とコロンを書いておきます。
while の条件で使うなら、この手は使えないので、それぞれのtestの条件を !( ) で囲んで、
test \! \( -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" \) || test \! \( "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255 \)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- その他(インターネット接続・インフラ) アプリ利用者を特定し、裁判に 2 2022/06/09 21:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- 訴訟・裁判 2ちゃんねるの歴史 からして 認証システム は必要ですか? 1 2022/10/09 05:39
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Wi-Fi・無線LAN 無線ルーターのIPアドレスは、iPhoneのように簡単に変更できる??? 2 2022/04/02 19:00
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- その他(コンピューター・テクノロジー) batファイルでPCの設定内容やプロパティーを取得したいのですが、コマンド1個で1ファイルとなるのを 2 2022/04/27 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックスラッシュの意味がわか...
-
export と set は違うの?
-
msys(cygwin)で、シェルスクリ...
-
Cシェル内でBシェルの様な関数...
-
シェルの変数をMySQLに送る方法...
-
Solarisでデフォルト環境変数の...
-
違いについて
-
ターミナルが全く入力できない
-
正規表現とワイルドカード
-
lsコマンド部分一致方法
-
シェルとシェルの間で環境変数...
-
.cshrc ファイルについて
-
Dirコマンドでフォルダ内ファイ...
-
TOPコマンドで表示するCPU使用...
-
エクセルの表にヘンな枠が・・・
-
スクリプトのエラー「unexpecte...
-
UNIX コマンドにおける # や円...
-
iqoo neo 9と言うスマホがある...
-
コマンドプロンプトから別マシ...
-
pingは正常なのにtracerouteで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Cシェル内でBシェルの様な関数...
-
export と set は違うの?
-
ターミナルが全く入力できない
-
ubuntuの端末の左にカレントデ...
-
シェルスクリプトで #!/bin/sh ...
-
.cshrc ファイルについて
-
バックスラッシュの意味がわか...
-
シェル 会話形式でエンターキ...
-
『存在するかどうか分からない...
-
シェルスクリプトに関する問題...
-
lsコマンド部分一致方法
-
シェルスクリプトのbashとperl...
-
シェル(ksh)で変数にある文字列...
-
mac os x10.6.4のターミナルでp...
-
Linuxのファイル禁止文字
-
Solarisでデフォルト環境変数の...
-
ps -aのセッションリーダとは
-
csh (tcsh)での環境変数の長さ...
-
Cシェルでのファイルからの入...
-
tcshなのにスクリプト構文中のs...
おすすめ情報