Я проверил ваш скрипт, чтобы увидеть проблему. Он заканчивается делением на ноль, потому что 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-х". Без фигурных скобок это было бы немного более неудобно. Без фигурных скобок иногда вы можете столкнуться с такой неопределенностью, не узнавая ее легко.