【问题标题】:line 8: [: N: integer expression expected第 8 行:[:N:需要整数表达式
【发布时间】:2016-07-13 00:31:37
【问题描述】:

我收到错误第 8 行:[: N: integer expression expected。我已尝试删除 $userManuf 中的 " " 并将 = 更改为 ==,但我仍然收到错误。我应该怎么办?谢谢

function manuf {
 echo -n "Manufacturer: " ; read userManuf
 varManuf=$(mysql -D snipeit -e "SELECT count(id) FROM manufacturers;")
 countManuf=$(echo $varManuf | awk '{print $2}')

 if [ $userManuf -ne 0 ] && [ $userManuf -le $countManuf ]; then
    assetModelManuf=$userManuf
 elif [ "$userManuf" = "n" ] || [ "$userManuf" = "N" ]; then
    echo -n "Type new manufacturer name: " ; read userNewManuf
    assetModelManuf=$userNewManuf
 else    echo "Try again!" && manuf
 fi
}

【问题讨论】:

  • 您需要指定这是什么语言。使用标签。
  • 感谢提醒,它的 bash 脚本,我是新手。是的,我读过关于编写条件表达式和比较的文章

标签: linux bash shell centos7


【解决方案1】:

$userManuf 扩展为N 时发生错误,但您尝试将其用作整数 运算符-ne 的操作数。最简单的解决方法是先验证它是否有一个数值(然后使用算术语句来简化比较):

if [[ $userManuf =~ [0-9]+ ]] && (( 0 < userManuf && userManuf <= countManuf )); then
    assetModelManuf=$userManuf
elif [[ $userManuf = [nN] ]]; then
    read -p "Type new manufacturer name: " assetModelManuf
else
    echo "Try again!" && manuf
fi

您可能还想使用while 循环而不是递归调用manuf。我将把它留作练习(或未来的问题,如有必要)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2013-07-31
  • 1970-01-01
  • 2014-11-30
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多