shell,匹配终端输出中的字符串

时间:2015-01-22 12:56:06

标签: linux bash shell grep

我会去看看我的触摸屏是否用自己的脚本校准。 但我对shell脚本的经验很少。我希望有人能帮助我。

我的想法是执行xinput --list-pros <device>并使用条目...(242): <no items>检查终端输出。 如果未校准触摸屏,则可以选择此选项,其他x/y坐标如...(242): 1 22 333 4444

在我的脚本中,我将执行xinput --list-pros <device>并检查grep是否有条目(242)然后检查同一行是否有条目<no items>。但我无法阅读xinput --list的输出。

# read the terminal output from xinput
$xinput_output= less xinput --list-pros 7

    while read $xinput_output
    do
         # check first line from output
         grep "242" $xinput_output
         if [ $? != 0]
         then
             break;
         else
             # found 242 check x/y coordinates
             grep "<no items>" $xinput_ouput
             if [ $? != 0]
             then
                 #no x/y coordinates, execute xinput_calibration
                 xinput_calibration
                 exit 0
             fi
         fi

    done < $1

4 个答案:

答案 0 :(得分:0)

用反引号或$()附上你的命令:

var=`some command`  # note no $ before var
# Or by $()
var=$(some command)

# then you can now use command's output
echo $var

答案 1 :(得分:0)

大概是指xinput --list-props

无论哪种方式,你需要在bash中正确执行命令,并且需要正确分配变量,所以试试这个:

xinput_output=$(xinput --list-props 7)

答案 2 :(得分:0)

感谢您的帮助,

我有一个有效的解决方案。 但我会提前一点。我将删除'touch'命令并将'./demo'输出写入不在文件中的内存中。 不要混淆我改变'xinput'以便在我自己的'./demo'中进行测试,这是一个只有很少'echo'命令来生成终端输出的脚本。

    #filename: touch
    #!/bin/bash

            touch /tmp/tmp.log
            ./demo > /tmp/tmp.log

            calibration=$(grep controller /tmp/tmp.log)
        if [ $? != 0 ]
        then
            echo "missing match, corrupt file\n"
            exit 0
        fi

        if [[ $calibration == *"<no items>"* ]]
        then
            echo no calibration
            #xinput_calibration
        else
            echo found x/y coodinates
        fi

        rm /tmp/tmp.log

        exit0

测试脚本:

#filename: demo
#!/bin/bash

echo 'cookie'
echo 'cookie'
echo 'cookie'
controller\:\ \<no\ items\>
echo 'cookie'
echo 'cookie'
echo 'cookie'

exit 0

答案 3 :(得分:0)

<***>我****找到**解决方案**。 :D \“/,

我的问题是,

tmp=$(./demo)
echo $tmp

将./demo的终端输出作为字符串输出。 和'grep'你找不到一行。 所以你必须输入“$ {tmp}”来找到grep的单行。

#cache terminal output
    tmp=$(./demo)
#find word in cache
    match=$(echo "${tmp}" | grep 'controller')
    echo $match