bash字符串比较无法按预期方式工作-如何修复

时间:2018-10-03 09:09:21

标签: linux bash

我正在尝试通过将命令输出与预期输出进行比较来检查Linux系统上是否安装了程序。我希望程序不存在,所以如果程序是abc,那么我应该看到:

bash: abc: command not found

但是我却得到了以下输出:

Shell for this session: bash
./checkprogs.sh: line 17: [: too many arguments
addgroup feature enabled test 1
./checkprogs.sh: line 15: tftp: command not found
./checkprogs.sh: line 17: [: too many arguments
tftp feature enabled test 2
2 tests performed

这是bash代码:

ourshell="/bin/bash"
ourshell=${ourshell#*bin/}
echo "Shell for this session: $ourshell"

counter=1

# list of programs we want to test if available
progs='addgroup tftp'

for prog in $progs
do
    expected="$ourshell: $prog: command not found"
    #echo "$expected"
    progoutput=$($prog -h)
    #echo "prog output is: $progoutput"
    if [ $expected != $progoutput ]
    then
      echo "test failed"
    fi
    echo "$prog feature enabled test $counter"
    ((counter++))
done

((counter--))
echo "$counter tests performed"

我该如何解决?

在我正在使用的系统上,外壳为bash且存在addgroup,但tftp不存在。

请注意,我在嵌入式平台上,未安装“期望”。假定最小的Linux安装。

编辑: 必须在[和之前]之后添加空间-但即使在修复后仍然无法按预期工作。

编辑: 抱歉,我是bash脚本的新手...

如果我引用[]中的字符串并在progoutput中添加2>&1,则代码如下:

progoutput=$($prog -h 2>&1)    # line 15

if [ "$expected" != "$progoutput" ]    # line 17

以便任何人都可以尝试:

progs='ls invalidxxx'     # line 9

则输出为:

Shell for this session: bash
test failed
ls feature enabled test 1
test failed
invalidxxx feature enabled test 2
2 tests performed

1 个答案:

答案 0 :(得分:1)

字符串比较的实际方法

if [ "$expected" != "$progoutput" ]

if [[ $expected != $progoutput ]]