我正在編寫一個shell腳本。變量將有一個網址,將看開頭幾個字符,shell腳本檢測第一對幾個字母
- 確保有東西之前//...so一個HTTP,HTTPS,RTMP,RTMPS,RTMPE,等... 。
- 如果沒有在//前面然後告訴用戶有什麼...否則,如果該值=無論作事
我將如何能做到這一點?
我正在編寫一個shell腳本。變量將有一個網址,將看開頭幾個字符,shell腳本檢測第一對幾個字母
我將如何能做到這一點?
首先,您應該嘗試使用perl或ruby等具有豐富的內置正則表達式功能的語言對其進行編碼。但是,如果你真的想這樣做的外殼,那麼刺痛運營商是你的朋友:
URL =「的東西://和別的東西」
$ {URL %%:// *}將解壓「某事」,我。即正在使用的協議。
$ {URL ## *://}將提取「和別的」一切即右側://
case "$URL" in
http://*|https://*) echo "HTTP selected" ;;
ftp://*|ftps://*) echo "FTP selected" ;;
*) echo "Nothing selected" ;;
esac
伊格納西奧演示瞭如何做直串匹配,並ennuikiller已經顯示出一些bash的模式匹配功能。但對於它的價值(或許是令人驚訝的給其他人給我),是bash確實能夠全正則表達式模式匹配:
一個附加的二進制運算符=〜, 是可用的,具有相同優先 as ==和!=。當它被使用時,運營商 右側的 字符串被認爲是擴展的常規 表達式,並相應匹配 (如在regex(3)中)。
這在[[
]]
運營商對於表達式求值的說明。
除了OP說「shell」,並沒有說「Bash」。 – 2010-07-17 14:46:21
$ {url ## *://}完美地工作,但$ {url %%://}只是給了我整個url而不是協議。 – Keith 2010-07-17 14:34:25
@Keith:兩個斜線後面應該有一個星號。 – 2010-07-17 14:43:28
丹尼斯做到了。謝謝大家...我在這裏看... http://guru-host.eu/en/Web_hosting/Articles/Bash_and_Pattern_Matching_Operators嘗試找出它,但沒有意識到我必須做一個星號。謝謝。 – Keith 2010-07-17 14:44:54