我正在编写一个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