shell 我正在写一个bash程序,如果输入的数字超过100,它会终止程序,我使用了if [ $a -gt 100 ](enter)exit 0,这有什么问题?

sbdsn5lh  于 2023-05-23  发布在  Shell
关注(0)|答案(2)|浏览(228)
if [ $a -lt 7 ] || [ $a -gt 77 ]
then
echo "follow instructions"
elif [ $a -gt 100 ]
echo "invalid"
exit 0
fi

但是exit语句不起作用
如果我输入一个数字-gt 100,我希望程序停止执行

h79rfbju

h79rfbju1#

两件事:

  • a > 100为真时,a > 77也为真。
  • if子句为true时,甚至不计算elif

请考虑以下情况:

#!/usr/bin/env bash
#              ^^^^- note, run this with bash, not sh

if (( a > 100 )); then
  echo "invalid" >&2
  exit 1
elif (( a < 7 || a > 77 )); then
  echo "follow instructions" >&2
fi
jq6vz3qz

jq6vz3qz2#

条件范围没有意义。

  • 你有(a < 7)或(a > 77)作为正例。
  • 然而,(α> 77)正情况与(α> 100)负情况重叠。
  • 此外,程序没有说明当(a >= 7和a <= 77)时会发生什么?

为什么要让程序在输入无效时退出?通常,程序会反复验证输入并询问,直到得到一个值。不显示用户输入的代码。下面尝试显示用户输入的验证,并尝试荣誉您的完成和退出条件:

#!/bin/bash
while [ 1 == 1 ];
do
  echo -n "Enter a number: "
  read a
  if ! [[ "$a" =~ ^[0-9]*$ ]]; then
    echo "Not a number, try again."
    continue
  fi
  if (( a > 100 )); then
    echo "Termination condition found."
    exit 1
  fi
  if (( a < 7 || a > 77 )); then
    echo "Valid number found."
    break
  fi
  echo "Invalid number found. Try again."
done
echo "You typed: $a"

下面是上述程序的运行示例:

$ ./script.sh
Enter a number: afdafdsa
Not a number, try again.
Enter a number: fdaslkf;daslf;ds
Not a number, try again.
Enter a number: 55
Invalid number found. Try again.
Enter a number: 1234
Termination condition found.
$ ./script.sh
Enter a number: 3
Valid number found.
You typed: 3
$

相关问题