【问题标题】:Why is it saying integer expected? [duplicate]为什么它说整数预期? [复制]
【发布时间】:2020-05-24 13:05:25
【问题描述】:
#!/bin/bash

if [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ]
    then
    echo This is empty or does not have all 3 parameters
    exit
elif [ "$1" -lt 0 ]
    then
    echo This aint a number
    exit

fi

尝试运行脚本,假设首先检查是否输入了 3 个位置参数, 其次检查输入是否为数字,然后显示最大的。我得到了第一个 if 语句,但是当我为第一个参数输入一个字符串来测试 elif 语句时,出现一个错误,表明需要整数。

【问题讨论】:

  • 您输入的是什么字符串?如果不是整数,[ 不能用它和 0 比较,使用-lt
  • 这能回答你的问题吗? Integer expression expected error in shell script
  • 当我运行脚本时我把 ./largest.sh Test 2 4,使用“Test”作为字符串,看看脚本中的 if 语句是否有效

标签: bash if-statement


【解决方案1】:

你必须检查正则表达式来检查字符串是否只包含数字,但你可以试试这个:

#!/bin/bash

if [[ "$1" == "" ]] || [[ "$2" == "" ]] || [[ "$3" == "" ]]
    then
    echo "This is empty or does not have all 3 parameters"
    exit
elif ! [[ "$1" =~ ^[0-9]+$ ]]
    then
    echo "This aint a number"
    exit

fi

请注意,[[ 实际上是一个返回 0(真)或 1(假)的命令/程序。任何遵循相同逻辑的程序(如所有基本工具,如 grep(1) 或 ping(1))都可以用作条件:

[[ -z STRING ]] #Empty string
[[ -n STRING ]] #Not empty string
[[ STRING == STRING ]]  #Equal
[[ STRING != STRING ]]  #Not Equal
[[ NUM -eq NUM ]]   #Equal
[[ NUM -ne NUM ]]   #Not equal
[[ NUM -lt NUM ]]   #Less than
[[ NUM -le NUM ]]   #Less than or equal
[[ NUM -gt NUM ]]   #Greater than
[[ NUM -ge NUM ]]   #Greater than or equal
[[ STRING =~ STRING ]]  #Regexp
(( NUM < NUM )) #Numeric conditions

还检查字符串是否仅包含数字/数字字符

[[ "$1" =~ ^[0-9]+$ ]]

【讨论】:

  • 感谢人让它工作
【解决方案2】:

请使用正则表达式检查号码

#!/bin/bash
if [ $1 == "" ] || [ $2 == "" ] || [ $3 == "" ]
    then
    echo This is empty or does not have all 3 parameters
    exit
elif ! [[ $1 =~ ^[0-9]+$ ]]
    then
    echo This aint a number
    exit

fi

【讨论】:

  • 感谢您的洞察
猜你喜欢
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2016-08-22
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多