You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

编写Linux Bash成绩计算脚本:支持多科目及Prelim/Midterm/Final统计

Bash Script for Grade Calculation with Subject & Term Averages

Let's fix up your script to meet all the requirements—your original code had redundant input prompts, missed tracking subject names, and didn't calculate cross-subject term averages or the overall average. Here's the polished, functional version:

#!/bin/bash

# Initialize total counters for term averages and overall total scores
total_prelim=0
total_midterm=0
total_final=0
total_subject_averages=0

# Get number of subjects from user
read -p "Enter number of subject: " subj_count

# Loop through each subject to collect scores
for (( i=1; i<=subj_count; i++ )); do
    read -p "Enter subject Name: " subj_name
    
    # Collect scores for each term
    read -p "Enter Prelim Grade For $subj_name: " prelim_score
    read -p "Enter Midterm Grade For $subj_name: " midterm_score
    read -p "Enter Final Grade For $subj_name: " final_score
    
    # Calculate current subject's average
    subject_average=$(echo "scale=4; ($prelim_score + $midterm_score + $final_score)/3" | bc)
    
    # Update running totals for cross-subject calculations
    total_prelim=$(echo "$total_prelim + $prelim_score" | bc)
    total_midterm=$(echo "$total_midterm + $midterm_score" | bc)
    total_final=$(echo "$total_final + $final_score" | bc)
    total_subject_averages=$(echo "$total_subject_averages + $subject_average" | bc)
    
    # Print subject-specific result
    echo "$subj_name Average is: $subject_average"
    echo
done

# Calculate cross-subject term averages
prelim_average=$(echo "scale=4; $total_prelim / $subj_count" | bc)
midterm_average=$(echo "scale=4; $total_midterm / $subj_count" | bc)
final_average=$(echo "scale=4; $total_final / $subj_count" | bc)

# Calculate overall average (average of all subject averages)
overall_average=$(echo "scale=4; $total_subject_averages / $subj_count" | bc)

# Print final summary averages
echo "Prelim Average is: $prelim_average"
echo "Midterm Average is: $midterm_average"
echo "Final Average is: $final_average"
echo "Overall Average is: $overall_average"

Key Improvements & Notes:

  • Subject Name Tracking: Added a prompt for each subject's name to match your expected output format.
  • Running Totals: Variables like total_prelim keep cumulative scores so we can compute cross-subject and overall averages at the end.
  • Clean Input Flow: No redundant subject count prompts—we read this value once upfront.
  • Precision Control: Using scale=4 in bc ensures consistent 4-decimal precision for all calculated averages.
  • Readable Output: Separated individual subject results from the final summary for clarity.

Expected Output Example:

Enter number of subject: 3
Enter subject Name: Math
Enter Prelim Grade For Math: 89
Enter Midterm Grade For Math:89
Enter Final Grade For Math:89
Math Average is: 89.0000

Enter subject Name: English
Enter Prelim Grade For English: 90
Enter Midterm Grade For English:90
Enter Final Grade For English:90
English Average is: 90.0000

Enter subject Name: Science
Enter Prelim Grade For Science: 91
Enter Midterm Grade For Science:91
Enter Final Grade For Science:91
Science Average is: 91.0000

Prelim Average is: 90.0000
Midterm Average is: 90.0000
Final Average is: 90.0000
Overall Average is: 90.0000

内容的提问来源于stack exchange,提问作者Paraguraan

火山引擎 最新活动