如何检查数字是否在shell

时间:2018-05-25 04:58:11

标签: bash shell sh

我想在两个值之间插入数字,否则重复脚本直到正确的数字。

这是我的脚本,但无法正常工作:

validation(){
read number
if [ $number -ge 2 && $number -ls 5 ]; then
    echo "valid number"
    break
else
    echo "not valid number, try again"
fi

}

echo "insert number"
validation
echo "your number is" $number

5 个答案:

答案 0 :(得分:6)

如果您使用Bash,最好使用算术表达式((...))以获得可读性和灵活性:

if ((number >= 2 && number <= 5)); then
  # your code
fi

要在循环中读取,直到输入有效数字:

#!/bin/bash

while :; do
  read -p "Enter a number between 2 and 5: " number
  [[ $number =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; }
  if ((number >= 2 && number <= 5)); then
    echo "valid number"
    break
  else
    echo "number out of range, try again"
  fi
done

((number >= 2 && number <= 5))也可以写为((2 <= number <= 5))

另见:

答案 1 :(得分:2)

你的if语句:

if [ $number -ge 2 && $number -ls 5 ]; then 

应该是:

if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then

所做的更改:

  • 引用变量被视为good practice
  • ls不是有效的比较运算符,请使用le
  • 使用&&
  • 分隔单括号条件表达式

此外,您需要在脚本的第一行添加一个shebang:#!/usr/bin/env bash

答案 2 :(得分:2)

试试下面的代码

echo "Enter number" 

read input

  if [[ $input ]] && [ $input -eq $input 2>/dev/null ]

  then

        if ((input >= 1 && input <= 4)); then

    echo "Access Granted..."

    break

  else

    echo "Wrong code"

  fi

  else

     echo "$input is not an integer or not defined"

  fi

答案 3 :(得分:0)

if [ $number -ge 2 && $number -ls 5 ]; then

应该是

if [[ $number -ge 2 && $number -le 5 ]]; then

有关详细信息,请参阅help [[

答案 4 :(得分:0)

需要进行2次更改。

  1. 建议塞尔吉奥。

    if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then

  2. 不需要breakonly meaningful in a for, while, or until loop