在bash shell脚本中如何判断字符串中是否含有某个子字符串
时间:2019-11-20 08:52:59 来源:igfitidea点击:
问题
如何判断变量path=/srv/www/theitroad.local/中是否包含子字符串theitroad.local?
在Bash脚本中如何检查字符串是否包含子字符串?
解决方案
我们可以使用awk,perl,bash和其他方法在shell脚本中查找变量是否包含子字符串。
检查bash变量是否包含子字符串
在bash中查看字符串是否包含子字符串。
使用case语句
case "$var" in *pattern1* ) echo "do something #1";; *pattern2* ) echo "do something # 2";; * ) echo "Error...";; esac
示例代码:
#!/bin/bash path="/srv/www/theitroad.local" sync_root(){ echo "Running rsync..." rsync -ar $path/* [email protected]:$path } case "$path" in *theitroad.local*) sync_root ;; *) echo "Error: Domain does not exits in path.";; esac
在Bash中判断字符串是否包含子字符串
[
和[[
都是条件表达式。这是测试命令/内置命令的同义词。
但是,[[
是对[
命令的改进。
请注意,以下是bash特定的语法,不适用于BourneShell:
[[ $var = *pattern1* ]] ## 或者 ## if [[ $var = *pattern1* ]] then echo "Do something" fi
使用bash regex正则表达式语法
Bash v3以上版本还支持其他正则表达式。
判断bash变量是否包含子字符串的语法如下:
[[ $var =~ .*substring.* ]] [[ $value =~ .*container1.* ]] && do_something
示例代码:
#!/bin/bash domain="theitroad" [[ $domain =~ .*road* ]] && echo "Found" || echo "Not found" ## 或者 ## if [[ $domain =~ .*it* ]] then echo "found" else echo "Not found." fi
使用AWK正则表达式语法
使用AWK正则表达式测试shell脚本中字符串是否包含子字符串:
# define a var at shell var="This is a test" # use awk awk 'var="Hello world" grep -q 'foo' <<< $var && echo "包含foo子字符串" || echo "Not a substring" grep -q 'world' <<< $var && echo "包含world子字符串" || echo "Not a substring"~/test/{print "包含test子字符串"}' <<< $var
grep命令语法
使用grep命令测试Bash脚本中的字符串是否包含子字符串:
##代码##总结
在写bash脚本时,检查变量是否包含某个子字符串非常常用。当然,我们也可以使用Perl,Python等进行测试。