1

スクリプト内の既存の変数を置き換えるbashスクリプトにオプションの引数を渡すにはどうすればよいですか?例えば:

#!/bin/bash
#hostfinder.sh
#Find hosts in current /24 network

subnet=$(hostname -i | cut -d. -f1,2,3)

for j in \
    $(for i in $subnet.{1..255}; do host $i; done | grep -v not | cut -d" " -f5)
do ping -c1 -w 1 $j; done | grep -i from | cut -d" " -f3,4,5 | tr ':' ' ' | \
sed -e 's/from/Alive:/'

これにより、現在のホストのIPが取得され、可能性のあるネイバーに対して逆引き参照が実行され、検出されたホスト名がpingテストされ、次のような出力が表示されます。

Alive: host1.domain (10.64.17.23)
Alive: host2.domain (10.64.17.24)
...

私をクレイジーと呼んでください、しかしそれはnmapよりずっと速く、素晴らしいリストを吐き出します。

とにかく、スクリプトを実行するときに、オプションで、クラスCネットワークアドレスの最初の3つのオクテットを$1引数として$subnet変数に渡したいと思います。例えば:

./hostfinder.sh 10.20.0

私の最初の考えは$subnet= $ 1のようなものを試すことでしたが、それはうまくいかないと思います。スクリプトをよりエレガントなものに書き直すことにはあまり興味がありません。ほとんどの場合、件名に何を入れるかについて興味があります。

4

3 に答える 3

2

交換はどうですか:

subnet=$(hostname -i | cut -d. -f1,2,3)

と:

case $# in  
  0) subnet=$(hostname -i | cut -d. -f1,2,3);;
  1) subnet="${1}";;
  *) echo "To many arguments" >&2; exit 1;;
esac
  • $#コマンドライン引数の数です
  • これはエレガントではありませんgetoptが、理解と拡張が簡単です。
于 2013-03-13T10:35:11.027 に答える
0

getoptを使用して、コマンドラインのオプションから読み取り、変数を設定してみてください。

于 2013-03-13T09:42:18.307 に答える
-1

LtWorfが提案したように、を使用してみてくださいgetopt。コマンドラインからオプションと引数を読み取ります。

ここで使用法の素晴らしい例を見つけることができますgetoptgetoptの使用法の例

于 2015-04-16T08:19:49.637 に答える