编写一个shell脚本,从键盘上输入若干数,计算其平均值
#!/bin/bash# 提示用户输入数字
echo "请输入若干个数字,输入完成后按 Enter,结束输入时请输入 'done':"# 初始化变量
sum=0
count=0# 循环获取用户输入
while true; doread num# 如果输入是 'done',则结束输入if [[ "$num" == "done" ]]; thenbreakfi# 检查输入是否为数字if [[ "$num" =~ ^-?[0-9]+(\.[0-9]+)?$ ]]; thensum=$(echo "$sum + $num" | bc)((count++))elseecho "无效输入,请输入一个数字或 'done' 结束。"fi
done# 计算并输出平均值
if ((count > 0)); thenaverage=$(echo "scale=2; $sum / $count" | bc)echo "输入数字的平均值是:$average"
elseecho "没有有效的数字输入,无法计算平均值。"
fi
- 用户输入:
read num
用于从用户输入接收数字。如果用户输入的是'done'
,则退出循环。 - 验证输入: 使用正则表达式
[[ "$num" =~ ^-?[0-9]+(\.[0-9]+)?$ ]]
检查输入是否为数字,包括正负数和浮点数。 - 求和与计数: 如果输入有效数字,程序会累加求和并增加计数器
count
。 - 计算平均值: 当用户输入完成后,计算平均值并输出。如果没有有效的数字输入,脚本会提示无法计算平均值。
编写一个shell脚本,对输入的整数序列排序,实现插入排序
#!/bin/bash# 提示用户输入整数序列
echo "请输入整数序列,以空格分隔:"
read -a arr # 读取用户输入的整数序列到数组 arr# 插入排序算法
for ((i=1; i<${#arr[@]}; i++)); dokey=${arr[$i]} # 当前元素j=$((i - 1)) # 比较的位置,从当前元素的前一个位置开始# 向左移动元素,直到找到合适的位置while [[ j -ge 0 && ${arr[$j]} -gt $key ]]; doarr[$((j + 1))]=${arr[$j]} # 元素向右移动((j--)) # 继续向左比较done# 将当前元素插入到正确的位置arr[$((j + 1))]=$key
done# 输出排序后的结果
echo "排序后的整数序列:${arr[@]}"
解释:
-
读取输入:
read -a arr
会将用户输入的整数序列(以空格分隔)读取到数组arr
中。 -
插入排序:
- 外循环:
for ((i=1; i<${#arr[@]}; i++))
遍历数组,从第二个元素开始。 - 内循环:
while [[ j -ge 0 && ${arr[$j]} -gt $key ]]
检查当前元素是否大于它前面的元素,如果大于就将前面的元素右移一位,直到找到合适的位置。 - 插入当前元素:通过
arr[$((j + 1))]=$key
将当前元素插入到正确的位置。
- 外循环:
-
输出结果:排序后,通过
${arr[@]}
输出排序后的数组。