1

Webサイトが稼働しているかどうかを確認するための小さなbashスクリプトを作成しました(isup.meを使用)。現在は動作しています(ターミナルでは「shisup.shstackoverflow.com」と呼んでいます)。私ができるようにしたいのは、「sh isup.sh stackoverflow.com someother.site」(2つの引数)を呼び出し、各引数の出力をループすることです。これが私のコードです:

#!/bin/bash
theSite=$1
curl isup.me/$theSite | grep 'just' | sed s'/<a href="//' | sed s'/" class="domain">//' | sed s'/<\/a>//' | sed s"/http:\/\/$theSite//" | sed s'/<\/span>//'

私が持っているもう1つの(重要ではない)質問は、カール関数の「%合計%受信%Xferd平均速度時間時間時間現在」ビットを取り除くことができますか?

4

3 に答える 3

5

配列をループする$@と、最初の引数から始まる引数が得られます。

for theSite
do
  ...
done

デフォルトではforループオーバーすることに注意してください$@

引数は-scURLにサイレントを指示します。

于 2012-12-15T02:21:18.230 に答える
2

curl複数のURLを受け入れるため、リストを作成して1つのコマンドを実行するだけです。これは、パラメータ展開を使用して非常に簡単に行うことができます。余談ですが、これらすべてのパイプを使用する必要はありません。1つのgsedまたはawkコマンドで全体を変更できます。これが私がそれを書く方法です:

#!/bin/bash

curl -s "${@/#/http://isup.me/}" |
    awk -F '[<>]' '/just/{
        sub("http://", "", $3);
        print $3 $NF;
    }'
于 2012-12-15T02:28:30.570 に答える
1

1つの方法は、このようにループすることです...

#!/bin/bash

while (( "$#" )); do
    theSite=$1
    curl isup.me/${theSite} 2>/dev/null | grep 'just' | sed s'/<a href="//' | sed s'/" class="domain">//' | sed s'/<\/a>//' | sed s"/http:\/\/$theSite//" | sed s'/<\/span>//'
    shift
done

これは、引数がまだある間に繰り返され、次にshift引数が左方向になります。

2>/dev/nullにリダイレクトされるstderrため/dev/null、その「余分な」出力は表示されません。

Ignacio Vazquez-Abramsの答えの-loopforは、を「忘れて」無限ループを作成するリスクがないため、より優れています。このアプローチを使用する必要があります。shift

別のアプローチはw3m、HTMLをレンダリングし、スクリプトをはるかに単純にするために使用することです。

#!/bin/bash

for theSite; do
    w3m -dump isup.me/${theSite} | grep "${theSite}"
done
于 2012-12-15T02:19:24.887 に答える