Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash字符串比较未按预期工作-如何修复_Linux_Bash - Fatal编程技术网

Linux bash字符串比较未按预期工作-如何修复

Linux bash字符串比较未按预期工作-如何修复,linux,bash,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:

我试图通过比较命令输出和预期输出来检查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"
我怎样才能解决这个问题

在我正在工作的系统上,shell是bash,addgroup存在,但tftp不存在

请注意,我在嵌入式平台上,未安装“expect”。假设linux安装量最小

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

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

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

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

字符串比较的实际方法

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


在添加
[
]
progoutput=$($prog-h)
周围的空格后,更新您看到的错误日志。如果[“$expected”!=“$progoutput”]应该是
progoutput=$($prog-h2>&1)
这是部分修复,您是否也可以引用变量作为
。但是,如果您使用例如line:progs='ls invalidxxx'运行自己,并将2>&1添加到progoutput=line,这两个测试仍然会失败。这非常有用。我的预期路线也不得不改变。
if [[ $expected != $progoutput ]]