让我告诉你我在做什么。
我正在运行一个脚本,该脚本正在为 Linux 和 SunOS 两个系统执行基本操作系统进程。它运行的第一个目录称为 sol0。该脚本将 sol0 的输出放入临时文件中。
它看起来像这样:
-----------------------
proc 1 response time = 67
proc 2 response time = 114
-----------------------
average response time = 90
completion_time = 170
total idle time = 32
percent idle time = 18%
-----------------------
我正在编辑脚本以在当前目录中创建一个文件来存储 sol0 的输出。我希望该文件与之后每个目录的输出进行比较。
我的 cmp 命令说,即使我使用不同的名称复制了 sol0 的副本,输出也不会匹配。他们都有相同的输出!
以下是我如何使用该命令,但首先是有关我的脚本的一些详细信息。
我的变量:
STUID=$1
PATH=${PATH}\:.
TMPFILE=tempfile
GDIR=`pwd`
OSNAME=`uname -s`
LOG=${GDIR}/results/${STUID}-${OSNAME}-X.log
DATE=`date`
TT=/dev/tty
file="./"
脚本如何调用函数来运行:
( if [ ${OSNAME} = SunOS ] ; then
ulimit 65
./sim >>${TMPFILE} 2>${TMPFILE}2 &
else
ulimit 35
./sim >>${TMPFILE} 2>${TMPFILE}2 &
fi
)
cmd命令:
if [ ${STUID} = sol0 ]; then
if [ ${OSNAME} = SunOS ]; then
echo " Making SunOS compare file. " > ${TT}
echo > ${GDIR}/compares
echo " Created file. " > ${TT}
cp ${TMPFILE} ${GDIR}/compares
else
echo " Making Linux compare file. " > ${TT}
echo > ${GDIR}/comparel
echo " Created file. " > ${TT}
cp ${TMPFILE} ${GDIR}/comparel
fi
else
echo " This is not sol0. " > ${TT}
fi
if [ ${OSNAME} = Linux ]; then
if [ ${STUID} != sol0 ]; then
if [ cmp ${TMPFILE} ${GDIR}/comparel ]; then
echo "${STUID} Linux output matches the Linux output of sol0." > ${TT}
else
echo "${STUID} Linux output does not match the Linux output of sol0." >${TT}
fi
else
echo "This is sol0, no comparing will be done." >${TT}
fi
else
echo "This is running on SunOS. " >${TT}
fi
答案1
具体查看您的cmp
命令,替换:
if [ cmp ${TMPFILE} ${GDIR}/comparel ]; then
和:
if cmp "${TMPFILE}" "${GDIR}/comparel"; then
当想要根据各种条件之一(文件存在、字符串为空等)设置退出代码时,可以使用该[
命令(也称为)。test
在这里,您想要根据命令的结果设置退出代码cmp
,并且您没有使用test
.因此,需要删除方括号。