1

我有以下

#!/bin/bash
aprograms=`pgrep a`
echo $aprograms

输出:

alejandro@ubuntu:~$ bash test.sh 
2 6 7 8 12 13 16 17 20 27 ...

我想控制 $aprograms 中是否有值。我尝试了以下方法(我不知道它是否有效):

if [ $value in $aprograms ];then
    echo "found"

但不起作用。是否有正确的方法来控制 $aprograms 中是否有值?

4

5 回答 5

1
#!/bin/bash

function foo () {
  echo 2 6 7 8 12 13 16 17 20 27
}

function search_value () { 
  for i in $2; do {
    if [ $i -eq $1 ]; then {
      echo "found"
    } fi
  } done
}

search_value 13 "$( foo )"

只需更改foo您的输入程序:

search_value 13 "$( pgrep a )"    
于 2012-06-06T07:51:05.237 回答
1

你可以使用 bash 的参数扩展

shopt -s extglob
var="2 6 7 8 12 13 16 17 20 27"
if [ "${var/17?( )/}" != "$var" ] ; then echo "match"; fi
于 2012-06-06T07:55:41.497 回答
1
if [[ " $aprograms " =~ \ $value\  ]] ; then
    echo "found"
fi

此外,与grep

if pgrep a | grep -q -w "$value" ; then
    echo "found:
fi
于 2012-06-06T08:42:11.420 回答
0
-eq

等于

if [ "$a" -eq "$b" ]
于 2012-06-06T07:51:23.393 回答
0

由于pgrep每行输出一个 PID,因此您可以使用它grep来找到您正在寻找的那个。

#!/bin/bash
aprograms=$(pgrep a)
echo "$aprograms"
if grep -Fxqs "$value" <<< "$aprograms"
then
    echo "found"
fi

在扩展变量时始终引用变量以保留空格。

将模式用作固定字符串而不是正则表达式的-F选项。grep-x选项匹配整行,因此较小的字符串或数字不匹配较大的部分。选项-q-s抑制输出和错误输出。如果您的版本grep没有这些,请使用:

if grep -Fx "$value" <<< "$aprograms" > /dev/null >&2
于 2012-06-06T11:06:57.520 回答