0

文字列を整数と比較したいのですが、指定された要件を満たしている場合は、その値をテキスト ファイルに追加します。

test="$fqdn:$port"

if [ $test = "$fqdn:443" ]; then
  echo "$test" | tee -a list.txt
fi

この場合、変数fqdnはウェブサイトの値を保持し、ポートは異なるポート番号を保持しますが、私:list.txt.

このコードを実行すると、何らかの理由で目的の結果が得られません。誰か助けてくれませんか?私はシェルでのプログラミングに非常に慣れていません。

編集:

fqdn の値は次のようになります。

something1.awesome.com
something2.awesome.com
something3.awesome.com
something4.awesome.com
something5.awesome.com
...

ポートの場合、次のようになります。

80
8090
443
1090
80
80
...

編集2:

$port のみを 443 と比較することを考えましたが、最初の fqdn が最初のポートと一致し、最初の fqdn:port が fqdn:443 のようなものに等しい場合、それをテキスト ファイルに追加するため、私の場合はうまくいきません。

4

2 に答える 2

0

このようなものを試してください

if [ $port -eq 443 ]; then
    echo $fqdn:$port | tee -a list.txt
fi
于 2012-07-19T14:28:28.783 に答える
0

結合された FQDN と PORT データを SOCKET として扱う方が簡単で、この情報もログに記録する必要があるため、それが望ましいです。で単純なテキスト マッチを実行grepすると、特定のポートに対応する各行が検索されます。

ソケット リストは、スクリプトの早い段階で利用できますか? たとえば、ファイル内のリストとして利用できますか? その場合、次のように動作します (ファイル内の行ごとに 1 つの項目を想定socket.txt):-

PORT=443
grep ":$PORT\$" socket.txt | tee -a list.txt

ここで、grep は、完全なポート番号がコロンの後にあるすべての文字列をファイルで検索しています。あるいは、 grep は、パイプ経由で渡された行もフィルタリングします。

利用可能なソケット情報がない場合は、連続する FQDN および PORT 項目を自分で組み合わせて、socket.txtファイルを生成できます。FQDN リストと PORT リストを 2 つのファイルに書き込むことができる場合、次のスクリプト (例: という名前socket) がこれを行います (ここでも 1 行に 1 項目)。

#!/bin/bash

die() {
    echo "$*" >&2
    exit 1
}

[ $# = 2 ] || die "usage: `basename $0` FQDN PORT"

exec 6<$1 || die "Cannot open $1"
exec 7<$2 || die "Cannot open $2"

while true
do
    read FQDN <&6 && read PORT <&7 || exit
    echo "$FQDN:$PORT"
done

次のように実行します。socket fqdn.txt port.txt

于 2012-07-19T15:50:17.170 に答える