2013-03-08 101 views
0

我想在我的脚本检查,如果在我行有字设备我想这正则表达式什么是正则表达式用来查找一行是否包含单词?

if[$SERIAL =~ /device/]但执行结果COMMANDE未知。这是我的脚本,我尝试在只有目前的统计装置设备安装APK所以不是ofline,你会发现下面

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1); 
do 
    if [$SERIAL =~ /device/] 
    #if [$SERIAL = "/^.*/device\b.*$/m"] 
    then 
     cd $1 
     for APKLIST in $(ls *.apk); 
     do 
      echo "Installation de $APKLIST on $SERIAL" 
      adb -s $SERIAL install -r $1/$APKLIST & 
      #adb bugreport > bug.txt 
     done 
    fi 
done 
+0

您是否正在寻找序列号包含“设备”子字符串的设备,或者只是在“adb设备”输出中的同一行上具有“设备”的设备,还是让我们说“脱机”的设备? – 2013-03-08 19:24:30

回答

0

试试我的脚本你如果行变成:

if [[ $SERIAL =~ "device" ]] 
0

后, | cut -sf 1您的$ SERIAL变量将只包含序列号。那么你为什么试图将其与device相匹配呢?它永远不会是true。为什么你不会只使用

for SERIAL in $(adb devices | grep device$ | cut -sf 1); 

而不是你的if

0

必须始终在您的if声明,你要测试一下就把方括号之间的空间。您还必须了解有两种类型的方括号,[ ... ]标准和扩展[[ ... ]]

[实际上是其化名为test 命令Unix命令:

$ ls -li /bin/test /bin/[ 
54008404 -rwxr-xr-x 2 root wheel 18576 Jul 25 2012 /bin/[ 
54008404 -rwxr-xr-x 2 root wheel 18576 Jul 25 2012 /bin/test 

您可以通过查看test manpage看到基本的测试。

两个Kornshell(其中启动它),BASH给你使用双括号([[ ... ]])展开测试。 [[ ... ]]主要用于pattern matching。模式匹配扩展了shell可以在命令行上执行的通配符 - 类似于穷人的正则表达式。较新版本的BASH实际上允许您使用真正的正则表达式而不是模式匹配

要记住的重要一点是,每当你正在做的模式匹配测试(或正则表达式测试在BASH),则必须使用双括号,而不是单一的方括号中这只能测试字符串。

还请记住,正则表达式可以在任何地方行匹配:

if [[ $SERIAL =~ "device" ]] 

可以匹配devices。你想要做的是添加\b,以确保你匹配的单词device。该\b是一个正则表达式字边界:

if [[ $SERIAL =~ "\bdevice\b" ]] 

1.是的,我知道[在bash和Kornshell内置一个外壳,而[不执行/bin/[。但是,test命令也是shell内置的。

相关问题