2010-07-17 68 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