2014-07-16 126 views
0

這是我第一次嘗試編寫任何代碼,現在我想要一些幫助。bash腳本編寫新手,編寫wget腳本

我得到一個語法錯誤,但不知道它在哪裏。你可以看看我的代碼,並告訴我需要修復語法,以及我需要改進此腳本嗎?

#!/bin/bash 

echo -e "Please Input Website To Get URLS and IPs" 

while read line do wget $line -O $line.txt -o /dev/null ls -l $line.txt 

grep "href=" $line.txt | cat -d"/" -f3 |grep $line |sort -u > $line-srv.txt 

for hostname in $(cat $line-srv.txt);do host $hostname |grep "has adress" 

done 
+1

請包括你的具體錯誤。還請乾淨地縮進你的代碼(每個控制塊另外有一個縮進級別),你可能會發現你的錯誤。 –

+2

這可能是不可能的,因爲你錯過了while循環的另一端,即其他'done'在哪裏? – konsolebox

+0

@EtanReisner 我會嘗試壓痕 特定的錯誤:第23行:語法錯誤:文件 – LucidTruth

回答

1

您錯過了第二個「完成」。您只能終止其中一個while循環。

一致的縮進會解決這個問題。也就是說,如果你縮進循環中的所有內容,那麼缺少某些東西就會更加明顯。例如。

echo -e "Please Input Website To Get URLS and IPs" 

while read line 
do 
    wget $line -O $line.txt -o /dev/null 
    ls -l $line.txt 

    grep "href=" $line.txt | cat -d"/" -f3 |grep $line |sort -u > $line-srv.txt 

    for hostname in $(cat $line-srv.txt);do 
     host $hostname |grep "has adress" 
    done 
+0

一個很好的答案。也就是說,如果試圖展示最佳實踐,應該在適當的地方添加引用,並採取一些不良做法(如不必要地使用'echo -e')。 –

+0

...此外,此代碼與http://mywiki.wooledge.org/DontReadLinesWithFor –

+0

aah!我想我明白了!非常感謝! :D 儘管學習正確的縮進! hah – LucidTruth

0

您可能會發現這個簡單:

#!/bin/bash 
while read -p "Please Input Website To Get URLS and IP (CTRL-D to exit): " TARGET || { echo >&2; false; }; do 
    wget -O - -o "/dev/null" "$TARGET" | grep -Po '(?<=://)[^/]+' | grep "$TARGET" 
done | sort -u | xargs -r host | grep 'has address' 

嘗試運行它,並提供有關如何您的預期功能與其進行比較評價。

或者其他的形式:

#!/bin/bash 
while read -p "Please Input Website To Get URLS and IP (CTRL-D to exit): " TARGET || { echo >&2; false; }; do 
    wget -O - -o "/dev/null" "$TARGET" | grep -Po '(?<=://)[^/]+' | grep "$TARGET" | sort -u | xargs -r host | grep 'has address' 
done 
+0

我會給你的代碼嘗試,謝謝你:-) ! – LucidTruth

+0

即時消息全新! :D 但我只能讓你的循環: 「請輸入網址獲取URLS和IP(CTRL-D退出):」 每當我進入一個網站:P – LucidTruth

+0

@LucidTruth那麼你的原代碼想要接受多個網站。 – konsolebox