Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Unit testing 在Unix程序中,如何比较同一文件中的两个字符串?_Unit Testing_Shell_Unix - Fatal编程技术网

Unit testing 在Unix程序中,如何比较同一文件中的两个字符串?

Unit testing 在Unix程序中,如何比较同一文件中的两个字符串?,unit-testing,shell,unix,Unit Testing,Shell,Unix,嗨,我必须在unix中编写一个程序,这个程序应该比较同一个文件中的两个字符串, 文件下面包含这两个字符串以及其他在该程序中没有用处的数据, 我必须在文件中检查no(如16)是否在两个字符串中都匹配 Validating 16 transactions. Rows valid: 16. 给出错误 1.prog: line 5: Validating: command not found 1.prog: line 6: Rows valid: command not found 1.prog: l

嗨,我必须在unix中编写一个程序,这个程序应该比较同一个文件中的两个字符串, 文件下面包含这两个字符串以及其他在该程序中没有用处的数据, 我必须在文件中检查no(如16)是否在两个字符串中都匹配

Validating 16 transactions.
Rows valid: 16.
给出错误

1.prog: line 5: Validating: command not found
1.prog: line 6: Rows valid: command not found
1.prog: line 7: GRP1: command not found


NOT DONE
1.prog: line 11: =: command not found
代码如下:

#!/bin/sh
POINT='.'
for FILE in $HOME/l26026363.txt
do
  GRP1=grep "Validating" $FILE |cut -d' ' -f2
  GRP2=grep "Rows valid" $FILE |cut -d' ' -f3
  GRP1 =$GRP1$POINT
  echo $GRP1
  echo $GRP2 
  echo NOT DONE 
  if $GRP1 = $GRP2
   then  echo "IN IF"
   #mv FILE /home/appltest/test_dir
   fi
done

您的
if
语句应符合以下内容:

if [[ $GRP1 -eq $GRP2 ]]
(根据您实际使用的shell,可能会有一些变化,但我认为这些变化可能是最可移植的——如果不起作用,请使用给定shell的手册页来找出正确的格式)

如果
接受命令并检查其返回值。如果您给出的第一个参数不是命令(例如,转换为非命令的环境变量),它将尝试将其作为命令运行,但失败


下面是一个
bash
脚本的副本:

pax$ cat qq.bash
#!/bin/bash

GRP1=$(expr 22 + 3)
GRP2=$(expr 100 / 4)
GRP3=$(expr 75 - 5)

if [[ $GRP1 -eq $GRP2 ]] ; then
    echo "GRP1 and GRP2 are equal ($GRP1)"
else
    echo "GRP1 and GRP2 are unequal ($GRP1, $GRP2)"
fi

if [[ $GRP1 -eq $GRP3 ]] ; then
    echo "GRP1 and GRP3 are equal ($GRP1)"
else
    echo "GRP1 and GRP3 are unequal ($GRP1, $GRP3)"
fi

pax$ ./qq.bash
GRP1 and GRP2 are equal (25)
GRP1 and GRP3 are unequal (25, 70)

您的
if
语句应符合以下内容:

if [[ $GRP1 -eq $GRP2 ]]
(根据您实际使用的shell,可能会有一些变化,但我认为这些变化可能是最可移植的——如果不起作用,请使用给定shell的手册页来找出正确的格式)

如果
接受命令并检查其返回值。如果您给出的第一个参数不是命令(例如,转换为非命令的环境变量),它将尝试将其作为命令运行,但失败


下面是一个
bash
脚本的副本:

pax$ cat qq.bash
#!/bin/bash

GRP1=$(expr 22 + 3)
GRP2=$(expr 100 / 4)
GRP3=$(expr 75 - 5)

if [[ $GRP1 -eq $GRP2 ]] ; then
    echo "GRP1 and GRP2 are equal ($GRP1)"
else
    echo "GRP1 and GRP2 are unequal ($GRP1, $GRP2)"
fi

if [[ $GRP1 -eq $GRP3 ]] ; then
    echo "GRP1 and GRP3 are equal ($GRP1)"
else
    echo "GRP1 and GRP3 are unequal ($GRP1, $GRP3)"
fi

pax$ ./qq.bash
GRP1 and GRP2 are equal (25)
GRP1 and GRP3 are unequal (25, 70)

除了在另一个答案中解释的if语句外,当通过调用另一个命令在shell中分配变量时,必须对其进行反引号:

GRP1=`grep "Validating" $FILE |cut -d' ' -f2`
GRP2=`grep "Rows valid" $FILE |cut -d' ' -f3`

除了在另一个答案中解释的if语句外,当通过调用另一个命令在shell中分配变量时,必须对其进行反引号:

GRP1=`grep "Validating" $FILE |cut -d' ' -f2`
GRP2=`grep "Rows valid" $FILE |cut -d' ' -f3`

你不必多次使用grep。这是对过程的浪费。使用awk

for....
do    
    awk -vfile=$FILE '/Validating/{s1=$2}/Rows valid/{s2=$NF+0}
    END{
        if ( s1==s2 ){
          cmd="mv "file" /home/appltest/test_dir"
          system(cmd)
        }
    }' $FILE
done

你不必多次使用grep。这是对过程的浪费。使用awk

for....
do    
    awk -vfile=$FILE '/Validating/{s1=$2}/Rows valid/{s2=$NF+0}
    END{
        if ( s1==s2 ){
          cmd="mv "file" /home/appltest/test_dir"
          system(cmd)
        }
    }' $FILE
done