Bash 当我尝试执行shell脚本中没有先前值的代码时,什么代码函数有助于请求输入

Bash 当我尝试执行shell脚本中没有先前值的代码时,什么代码函数有助于请求输入,bash,shell,Bash,Shell,当我打开文件后选择选项3时,它就终止了 我试着在第3节中使用if-else函数,如果没有存储新值,它会请求新值,这样它不会终止,而是会请求值,但似乎无法解决 #!/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

当我打开文件后选择选项3时,它就终止了

我试着在第3节中使用if-else函数,如果没有存储新值,它会请求新值,这样它不会终止,而是会请求值,但似乎无法解决

  #!/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

如果没有存储以前的数据,我希望它请求新值。

我检查了您的脚本,以查看问题。它以零除结束,因为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“…”为真。shell不区分数据类型,因为我使用双引号,所以可以安全地检查空字符串,因为如果未设置s1,“$s1”将导致空字符串

顺便说一句,“$s1”在逻辑上等同于“${s1}”,但使用大括号更安全,因为在变量结束处没有歧义。例如,考虑线:

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

第一个回声输出“我喜欢90年代的音乐”,除非之前设置了变量“年份”,而第二个回声输出“我喜欢90年代的音乐”。如果没有花括号,这会有点不方便。如果没有花括号,有时你可能会在这种含糊不清的情况下运行,而不容易识别。

我检查了你的脚本,以了解问题所在。它以零除结束,因为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“…”为真。shell不区分数据类型,因为我使用双引号,所以可以安全地检查空字符串,因为如果未设置s1,“$s1”将导致空字符串

顺便说一句,“$s1”在逻辑上等同于“${s1}”,但使用大括号更安全,因为在变量结束处没有歧义。例如,考虑线:

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

第一个回声输出“我喜欢90年代的音乐”,除非之前设置了变量“年份”,而第二个回声输出“我喜欢90年代的音乐”。如果没有花括号,这会有点不方便。如果没有花括号,有时你可能会在这样的模糊中运行,而不容易识别。

尝试使用
read
@RAJ:我看不到s1和s2的任何定义,我也不知道你之前的代码是什么意思,但是如果s1和s2没有定义,
diff
应该为零。为什么不通过参数传递这些值?第一部分是这样的:-echo“Lower value”#输入读取s1的较低值echo“Higher value”#输入读取s2的较高值dif=$($s2-$s1))如果[$dif-ne 100],则echo“范围应为100”否则#如果差值为100,则程序运行以其他方式终止=
expr$s2-$s1
#范围echo的公式“$s1和$s2之间的8个随机数是:-”对于i in
seq 1 8
do t=
expr$random%$in
n=
expr$t+$s1
echo“$n”#这里我们得到echo中的随机数“按任意键…”read;;因此,当我首先使用此代码运行文件,然后使用我要求的代码运行文件时,它可以工作,但当我仅运行代码的第二部分时,我希望它要求新值。我的任务是创建一个脚本文件,其中需要在特定整数之间生成8个随机数(2个整数之间的差值只能为100)。也是这些整数的最高和最低随机数。也将其分为2个选项。1输入2个整数,然后查找8个随机数,2查找最高和最低随机数。尝试使用
read
@RAJ:我看不到s1和s2的任何定义,我也不知道您之前的代码是什么意思,但如果s1和s2未定义,
diff应为零。为什么不通过参数传递这些值?第一部分如下:-echo“Lower value”#输入读取s1的较低值echo“Higher value”#输入读取s2的较高值dif=$($s2-$s1))如果[$dif-ne 100],则echo“范围应为100“else#如果差值为100,则程序运行以其他方式终止=
expr$s2-$s1
#范围回波的公式”8$s1和$s2之间的随机数是:-“对于i in
seq 1 8
do t=
expr$random%$in
n=
expr$t+$s1
echo“$n”#这里我们得到回波中的随机数“按任意键…”read;;因此,当我首先使用此代码运行文件,然后使用我要求的代码运行文件时,它可以工作,但当我仅运行代码的第二部分时,我希望它要求新值。我的任务是创建一个脚本文件,其中需要在特定整数之间生成8个随机数(2个整数之间的差值只能为100)。也是这些整数的最高和最低随机数。也将其分为2个选项。1输入2个整数,然后查找8个随机数,2查找最高和最低随机数。很抱歉。我在这里复制了我的全部代码。在这里,当我打开文件后尝试选项3时,它将终止代码。因此,我希望它询问r新值,而不是终止文件。请帮助我。一旦您对您在答案中提出的问题有了答案,请将其删除。一般来说,答案不应包含问题-如果问题不清楚,请先在评论中获得澄清,然后在事情更清楚时写下答案。这将生成答案这对将来的读者来说更清楚。很抱歉。我在这里复制了我的全部代码。在这里,当我打开文件后尝试我的选项3时,它将终止代码。因此,我希望它请求新值,而不是终止文件。请帮我解决它。一旦您回答了您在回答中提出的问题,请删除它们。一般来说,答案不应包含问题-如果问题不清楚,请先在评论中澄清,然后在事情更清楚时写下答案。这将为未来的读者提供更清楚的答案。