2010-04-26 20 views
27

Bir sürü dosya indirmek için bir komut dosyası yazıyorum ve belirli bir dosya olmadığında onu bilgilendirmek istiyorum.wget'in dönüş değerini kontrol etme [if]

r=`wget -q www.someurl.com` 
if [ $r -ne 0 ] 
    then echo "Not there" 
    else echo "OK" 
fi 

Ama yürütme aşağıdaki hatayı veriyor:

./file: line 2: [: -ne: unary operator expected

Sorun ne?

cevap

34

$r, wget'in (çıktıları ile yakaladığınız) metin çıktısıdır. Dönüş koduna erişmek için $? değişkenini kullanın.

+0

başarısız çağrı çıkışı Aksi takdirde hata wget ile çıkılacak

  • saklanan başarılı kullanımı ise. – kSiR

  • +1

    Bu doğru olsa da, $ r' nin neden boş olduğu ve hata mesajının neden ortaya çıktığı daha iyi bir açıklama olabilir. – Brian

    10

    $r boştur ve bu nedenle durumunuz if [ -ne 0 ] olur ve -ne tek operatör olarak kullanılır. Bunun yerine bu deneyin: $? Son operasyonda çıkış kodu döndürür iken

    wget -q www.someurl.com 
    if [ $? -ne 0 ] 
        ... 
    

    DÜZENLEMEYİ Andrew benden önce açıklandığı gibi, backticks, standart çıktıyı döndürür. Bu stdout ve çıkış kodu hem yakalamanızı sağlar

    wget_output=$(wget -q "$URL") 
    if [ $? -ne 0 ]; then 
        ... 
    

    :

    +2

    Bu, askerin neden bu hata mesajını aldığını açıklayan tek cevaptır. +1. – lesmana

    53

    Diğerleri doğru en yeni çıkış kodu almak için $? kullanabileceği gönderdiniz. aslında o yazdırır umurumda değil, sadece doğrudan test edebilir:

    if wget -q "$URL" > /dev/null; then 
        ... 
    
    +4

    Kabul edilen yanıtı yuvarladığınız için teşekkür ederiz. – colgur

    +0

    Bu form kullanıldığında programın çıkış kodunu 'if' olacak standart mı? ('; sonra ...') – Vassilis

    9

    yapabildin sadece

    wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure" 
    
    -(~)----------------------------------------------------------(07:30 Tue Apr 27) 
    [email protected] [2024] --> wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure" 
    --2010-04-27 07:30:56-- http://ruffingthewitness.com/ 
    Resolving ruffingthewitness.com... 69.56.251.239 
    Connecting to ruffingthewitness.com|69.56.251.239|:80... connected. 
    HTTP request sent, awaiting response... 200 OK 
    Length: unspecified [text/html] 
    Saving to: `index.html.1' 
    
        [ <=>                     ] 14,252  72.7K/s in 0.2s  
    
    2010-04-27 07:30:58 (72.7 KB/s) - `index.html.1' saved [14252] 
    
    WE GOT IT 
    -(~)-----------------------------------------------------------------------------------------------------------(07:30 Tue Apr 27) 
    [email protected] [2025] --> wget ruffingthewitness.biz && echo "WE GOT IT" || echo "Failure" 
    --2010-04-27 07:31:05-- http://ruffingthewitness.biz/ 
    Resolving ruffingthewitness.biz... failed: Name or service not known. 
    wget: unable to resolve host address `ruffingthewitness.biz' 
    zsh: exit 1  wget ruffingthewitness.biz 
    Failure 
    -(~)-----------------------------------------------------------------------------------------------------------(07:31 Tue Apr 27) 
    [email protected] [2026] --> 
    
    +0

    Çok akıllı! Komut satırı yanıtı için '-q 'eklemeyi öneririm ... – insign

    1
    :

    if wget -q "$URL"; then 
        ... 
    

    Ve çıkışını bastırmak isterseniz

    Tüm çözümleri şanssız deniyorum. Wget, etkileşimli olmayan şekilde yürütülür. Bu arka planda wget çalışır ve $ ile dönüş kodu yakalayamazsınız anlamına gelir.

    wget --server-response -q -o wgetOut http://www.someurl.com 
    sleep 5 
    _wgetHttpCode=`cat wgetOut | gawk '/HTTP/{ print $2 }'` 
    if [ "$_wgetHttpCode" != "200" ]; then 
        echo "[Error] `cat wgetOut`" 
    fi 
    

    Not:

    bir çözüm http 200 durum kodu Örnek arama, "--server-yanıt" özelliği işlemek için var wget ben koymak bu nedenle, işini bitirmek için biraz zamana ihtiyacım "5 uykusu". Bu yapmanın en iyi yolu değil, çözüm testi için işe yaradı. Çağrı durumunu

    wget -O filename URL 
    if [[ $? -ne 0 ]]; then 
        echo "wget failed" 
        exit 1; 
    fi 
    

    Eğer wget durumunu kontrol edebilirsiniz Bu şekilde hem mağaza olarak çıkış verileri kontrol da wget sonucunu toplayıp analiz etmek

    0

    iyi yolu.

    1. Bu doğru yöntemdir

    İlgili konular