Проверка количества аргументов - PullRequest
5 голосов
/ 19 мая 2019

Я заранее прошу прощения за вопрос для начинающих, но не могу заставить этот кусок кода работать должным образом. Меня попросили составить базовую программу, которая запрашивает у пользователя 3 числа, а затем проверяет, какое значение является наибольшим, и печатает результаты, а также проверяет, вставлены ли три числа. Это может определить, какое из них является самым высоким, и я получаю чтобы правильно выводить результаты, но я не могу понять, как заставить его проверить, что в него вставлено три числа.

Я провел исследование и даже извлек некоторый код из примера учителя о том, как проверить количество аргументов, но я все еще не могу заставить его работать.

#!/bin/bash

echo "Please enter three numbers:"
read a b c
if [ $# -ne 3 ]
    then
    echo "You need three numbers"
    exit -1
fi
if [ $a -gt $b -a $a -gt $c ]
      then
              LARGEST=$a
elif [ $b -gt $a -a $b -gt $c ]
      then
              LARGEST=$b
elif [ $c -gt $a -a $c -gt $b ]
      then
              LARGEST=$c
elif [ $a -eq $b -a $a -eq $c -a $b -eq $c -eq $b ]
then
LARGEST="All three values are equal."
fi
echo "The largest values is $LARGEST"

Когда я ввожу три числа (7 8 9), я ожидаю получить обратно: «Наибольшее значение 9»

однако я получаю это вместо:

./values.sh: line 6 [0: command not found
The largest value is 9

Я что-то упускаю здесь явно очевидным? Я знаю, что мне нужен оператор, чтобы мой оригинал работал, но я использую неправильный оператор?

1 Ответ

3 голосов
/ 19 мая 2019

Тест [ -z "$c" ] решает его для кода, который вы разместили. Рабочий код:

#!/bin/bash

echo "Please enter three numbers:"
read a b c d
if [ -z "$c" ]
    then
    echo "You need three numbers"
    exit -1
fi
if [ -n "$d" ]
then
   echo "enter only three numbers"
   exit -1
fi
if [ $a -gt $b -a $a -gt $c ]
      then
              LARGEST=$a
elif [ $b -gt $a -a $b -gt $c ]
      then
              LARGEST=$b
elif [ $c -gt $a -a $c -gt $b ]
      then
              LARGEST=$c
elif [ $a -eq $b -a $a -eq $c -a $b -eq $c -eq $b ]
then
LARGEST="All three values are equal."
fi
echo "The largest values is $LARGEST"

Выход:

$ ./t.sh
Please enter three numbers:
7 8
You need three numbers
$ ./t.sh
Please enter three numbers:
7 8 9
The largest values is 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...