2010-07-17 66 views
0

我正在編寫一個shell腳本。變量將有一個網址,將看開頭幾個字符,shell腳本檢測第一對幾個字母

  1. 確保有東西之前//...so一個HTTP,HTTPS,RTMP,RTMPS,RTMPE,等... 。
  2. 如果沒有在//前面然後告訴用戶有什麼...否則,如果該值=無論作事

我將如何能做到這一點?

回答

1

首先,您應該嘗試使用perl或ruby等具有豐富的內置正則表達式功能的語言對其進行編碼。但是,如果你真的想這樣做的外殼,那麼刺痛運營商是你的朋友:

URL =「的東西://和別的東西」

$ {URL %%:// *}將解壓「某事」,我。即正在使用的協議。

$ {URL ## *://}將提取「和別的」一切即右側://

+0

$ {url ## *://}完美地工作,但$ {url %%://}只是給了我整個url而不是協議。 – Keith 2010-07-17 14:34:25

+0

@Keith:兩個斜線後面應該有一個星號。 – 2010-07-17 14:43:28

+0

丹尼斯做到了。謝謝大家...我在這裏看... http://guru-host.eu/en/Web_hosting/Articles/Bash_and_Pattern_Matching_Operators嘗試找出它,但沒有意識到我必須做一個星號。謝謝。 – Keith 2010-07-17 14:44:54

3
case "$URL" in 
    http://*|https://*) echo "HTTP selected" ;; 
    ftp://*|ftps://*) echo "FTP selected" ;; 
    *) echo "Nothing selected" ;; 
esac 
1

伊格納西奧演示瞭如何做直串匹配,並ennuikiller已經顯示出一些bash的模式匹配功能。但對於它的價值(或許是令人驚訝的給其他人給我),是bash確實能夠全正則表達式模式匹配

一個附加的二進制運算符=〜, 是可用的,具有相同優先 as ==和!=。當它被使用時,運營商 右側的 字符串被認爲是擴展的常規 表達式,並相應匹配 (如在regex(3)中)。

這在[[]]運營商對於表達式求值的說明。

+0

除了OP說「shell」,並沒有說「Bash」。 – 2010-07-17 14:46:21