一、绪论
1.设计背景
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。
2.设计目的
设计一个数学运行系统,该系统包含两个数由小到大排序、输出两个数之间所有数之和、输出三个数最小值、输出三个数中间值、输出回文数、输出一组整数中最大偶数和输出一组整数中最小奇数等功能。
二、需求分析
1.系统概述
(1)任务概述
Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的。Linux设计要用Shell脚本编程实现,将理论学习付诸实践。设计一个数学运算系统,该Shell脚本程序能实现两个数由小到大排序、输出两个数之间所有数之和、输出三个数最小值、输出三个数中间值、输出两个数之间回文数、输出一组整数中最大偶数和输出一组整数中最小奇数等功能。
(2)需求规定
数学运算系统包括一个主程序和七个函数,七个函数分别是两个数由小到大排序、输出两个数之间所有数之和、输出三个数最小值、输出三个数中间值、输出两个数之间回文数、输出一组整数中最大偶数和输出一组整数中最小奇数。
其中主程序运行时能显示一个菜单供用户选择。
2.功能需求
在主Shell脚本文件中有一个多操作选项的菜单以便用户从中选择。在不同任务中,这些操作能自动实现以下功能:
(1)两个数由小到大排序
(2)两个数之间所有数之和
(3)输出三个整数最小值
(4)输出三个数中间值
(5)输出两个数之间回文数
(6)输出一组整数中最大偶数
(7)输出一组整数中最小奇数
三、系统设计
1.模块结构图
2.菜单模块
程序代码:
3.两个数由小到大排序模块
程序代码:
4.两个数之间所有数之和模块
程序代码:
5.输出三个整数最小值模块
程序代码:
6.输出三个数中间值模块
程序代码:
7.输出两个数之间回文数模块
程序代码:
8.输出一组整数中最大偶数模块
程序代码:
9.输出一组整数中最小奇数模块
程序代码:
四、运行结果
1.菜单模块
2.两个整数由小到大排序模块
3.两个数之间所有数之和模块
4.输出三个整数最小值模块
5.输出三个整数中间数模块
6.输出两个数之间回文数模块
7.输出一组整数中最大偶数模块
8.输出一组整数中最小奇数模块
参考脚本
#!/bin/bash
# 函数:两个数由小到大排序
sort_numbers() {
echo "请输入两个数字,以空格分隔:"
read num1 num2
echo "排序后的结果为:"
echo "$num1 $num2" | tr " " "\n" | sort -n | tr "\n" " "
echo
}
# 函数:两个数之间所有数之和
sum_between() {
echo "请输入两个数字,以空格分隔:"
read num1 num2
sum=0
for ((i=num1; i<=num2; i++)); do
((sum += i))
done
echo "两个数之间所有数之和为:$sum"
}
# 函数:输出三个整数最小值
min_of_three() {
echo "请输入三个整数,以空格分隔:"
read num1 num2 num3
min=$num1
if [ $num2 -lt $min ]; then
min=$num2
fi
if [ $num3 -lt $min ]; then
min=$num3
fi
echo "三个整数中最小值为:$min"
}
# 函数:输出三个数中间值
median_of_three() {
echo "请输入三个数字,以空格分隔:"
read num1 num2 num3
echo "三个数中间值为:"
echo "$num1 $num2 $num3" | tr " " "\n" | sort -n | sed -n '2p'
}
# 函数:输出两个数之间的回文数
palindromes_between() {
echo "请输入两个数字,以空格分隔:"
read num1 num2
echo "两个数之间的回文数为:"
for ((i=num1; i<=num2; i++)); do
reversed=$(echo $i | rev)
if [ $i -eq $reversed ]; then
echo $i
fi
done
}
# 函数:输出一组整数中最大偶数
max_even() {
echo "请输入一组整数,以空格分隔:"
read -a numbers
max_even=-1
for num in "${numbers[@]}"; do
if [[ $num%2 -eq 0 && $num -gt $max_even ]]; then
max_even=$num
fi
done
echo "一组整数中最大偶数为:$max_even"
}
# 函数:输出一组整数中最小奇数
min_odd() {
echo "请输入一组整数,以空格分隔:"
read -a numbers
min_odd=999999999
for num in "${numbers[@]}"; do
if [[ $num%2 -ne 0 && $num -lt $min_odd ]]; then
min_odd=$num
fi
done
echo "一组整数中最小奇数为:$min_odd"
}
# 主菜单
while true; do
echo "请选择操作:"
echo "1) 两个数由小到大排序"
echo "2) 两个数之间所有数之和"
echo "3) 输出三个整数最小值"
echo "4) 输出三个数中间值"
echo "5) 输出两个数之间回文数"
echo "6) 输出一组整数中最大偶数"
echo "7) 输出一组整数中最小奇数"
echo "8) 退出"
read choice
case $choice in
1) sort_numbers ;;
2) sum_between ;;
3) min_of_three ;;
4) median_of_three ;;
5) palindromes_between ;;
6) max_even ;;
7) min_odd ;;
8) echo "退出程序."; exit ;;
*) echo "无效的选择,请重新输入." ;;
esac
done
需要不同脚本实现方式可按照如下方式获取:
https://laowangall.oss-cn-beijing.aliyuncs.com/studentall.pdf