gpt4 book ai didi

bash - [ : -gt: unary operator expected

转载 作者:行者123 更新时间:2023-11-29 09:18:16 25 4
gpt4 key购买 nike

我写的 Bash 不多,所以我对如何解决这个问题有点困惑。我需要检查命令返回的值是否大于 x。当它运行时,我得到了 [: -gt: unary operator expected 我无法修复。

这是我的脚本,

#!/bin/sh
ERROR=0
PHPCPDLevel=100

# PHPCPD
echo "PHP CopyPaste Detection (Limit is at least ${PHPCPDLevel}%"
PHPCPD="phpcpd ."
if [[ `echo $PHPCPD | grep "%" | cut -d'.' -f1` -gt "$PHPCPDLevel" ]]
then
echo $PHPCPD
ERROR=1
else
echo "... -> Only `echo $PHPCPD | grep "%" | cut -d'.' -f1`%"
fi

echo "Finished!"
exit $ERROR

更新:我想我已经做到了:

#!/bin/sh
ERROR=0
PHPCPDLevel=25

# PHPCPD
echo "PHP CopyPaste Detection (Limit is at most ${PHPCPDLevel}%)"
PHPCPD="phpcpd ."
PERCENTAGE=$($PHPCPD | grep "%" | cut -d'.' -f1)
if [ ${PERCENTAGE} -gt ${PHPCPDLevel} ]
then
echo $PHPCPD
ERROR=1
else
echo "Only $PERCENTAGE%"
fi

exit $ERROR

最佳答案

请记住 [ 是一个命令。它可能内置在您的 shell 中,但它仍然是一个命令。它需要一组特定的参数,当它得到它不理解的东西时会给你一个错误。事实上,您可以将 [ ... ] 替换为 test ... 如果这会使事情更容易理解:

例如:

test -gt 34

将返回:

bash: test: -gt: unary operator expected

嗯……同样的错误信息。

当你遇到这样的事情时,你应该在 shell 脚本的问题区域周围使用 set -xvset +xvset -xv 将打印出要执行的 shell 命令,然后将向您展示命令行在被 mangled 后的样子我的意思是 interpolated 由外壳。

我怀疑你的错误是:

if [ ${PERCENTAGE} -gt ${PHPCPDLevel} ]

${PERCENTAGE} 是一个空白值。如果您使用 [[ ... ]] 而不是 [ ... ] 则不会出现该错误。 [[ ... ]] 的解析与 [ ... ] 略有不同,因为它是一个复合命令。 shell 插值是在解析初始命令后完成的,因此如果您遗漏了引号或字符串包含意外字符,它会更宽容一些。

所以:

ERROR=0
PHPCPDLevel=25

# PHPCPD
echo "PHP CopyPaste Detection (Limit is at most ${PHPCPDLevel}%)"
export PS4="\$LINENO: " # Prints out the line number being executed by debug
set -xv # Turn on debugging
PHPCPD="phpcpd ."
PERCENTAGE=$($PHPCPD | grep "%" | cut -d'.' -f1)
if [[ ${PERCENTAGE} -gt ${PHPCPDLevel} ]] # Use [[ ... ]] instead of [ .. ]
then
echo $PHPCPD
ERROR=1
else
echo "Only $PERCENTAGE%"
fi
set +xv # Turn off debugging

exit $ERROR

现在,您将看到设置环境变量的各种命令返回的内容,并且可能会看到一些您没有预料到的内容。

关于bash - [ : -gt: unary operator expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24953465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com