какая функция кода поможет запрашивать ввод, когда я пытаюсь выполнить код без предыдущего значения в сценарии оболочки - PullRequest
0 голосов
/ 07 июня 2019

Когда я выбираю вариант 3 после открытия файла, он просто прекращается.

Я пытался использовать функцию if else внутри секции 3, где она запрашивает новые значения, если ни одно из них не сохранено, так что вместо завершения она будет запрашивать значения, но, похоже, не может сработать.

  #!/bin/bash
while : #This program demonstrate 4 option below
do
clear
echo "Main Menu" 
echo "Select any option of your choice"
echo "[1] Show Todays date/time,Files in current directory,home 
directory,user id "
echo "[2] Enter a range  "
echo "[3] Highest and lowest of the eight random numbers "
echo "[4] Exit/Stop "
echo "==========="
echo -n "Menu choice [1-4]: "
read -r yourch #Choose option out of 4
case $yourch in 


1)      echo "Today is";date;
    echo "Your home directory is:";home;
    echo "Your path is :";PWD;       
echo  "Current Shell";uname;
echo "Your Student ID $USER ID ";
echo "Press a key...";read -r;;


2)  echo "Lower value" #Enter the lower value
read -r s1
echo "Higher value" #Enter the higher value
read -r s2
dif=$((s2-s1))
if [ $dif -ne 100 ]
then 
    echo "Range should be 100"
else #if the differnce is 100 then programe run otherwise terminates
in=$( ("$s2" - "$s1")) #formula for the range

echo "8 random numbers between $s1 and $s2 are :-"
for i in $(seq 1 8)
do
    t=$( ($RANDOM % "$in"))
    n=$( ("$t" + "$s1"))
    echo "$n" #Here we get the random numbers
done
fi

echo "Press a key..."; read -r;;


3) diff=$((s2 - s1)) #Depicts Highest and lowest numbers of the randoms
RANDOM=$$
min=9999
max=-1
for i in $(seq 8)
do
    R=$((((RANDOM%diff))+s1))
    if [[ "$R" -gt "$max" ]]
    then
        max=$R
    fi
    if [[ "$R" -lt "$min" ]]
    then
        min=$R
    fi 
done
echo "Biggest number and  smallest numbers are $max and $min" #Prints the highest and lowest numbers

echo "press a key...";read -r;;


 4)echo " THANK YOU VERY MUCH $ Good Bye"
exit 0;; #Exit command
*)echo "Opps!!! Please select choice 1,2,3,4";
echo "press a key...";read -r;;

esac
done

Я бы хотел, чтобы он запросил новые значения, если предыдущие данные не сохранены.

1 Ответ

2 голосов
/ 07 июня 2019

Я проверил ваш скрипт, чтобы увидеть проблему. Он заканчивается делением на ноль, потому что s1 и s2 изначально не установлены. Чтобы решить эту проблему, вы можете использовать код как

if [ -z "${s1}" ] ;then
  read -p "s1 is empty, please enter a number " s1
fi
if [ -z "${s2}" ] ;then
  read -p "s2 is empty, please enter a number " s2
fi

-z "..." - true, если строка пуста. Оболочка не различает типы данных, и поскольку я использую двойные кавычки, можно безопасно проверить наличие пустой строки, поскольку, если s1 не задано, «$ s1» приводит к пустой строке.

Btw. «$ s1» логически эквивалентно «$ {s1}», но безопаснее использовать фигурные скобки, потому что в этом месте нет неопределенностей в конце переменной. Например, рассмотрим строки:

year=90
echo "I like the music of the $years"
#
echo "I like the music of the ${year}s"

Первый вывод эха "Мне нравится музыка", если переменная "Лет" была установлена ​​ранее, в то время как второй выводит "Мне нравится музыка 90-х". Без фигурных скобок это было бы немного более неудобно. Без фигурных скобок иногда вы можете столкнуться с такой неопределенностью, не узнавая ее легко.

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