lyttown吧 关注:7贴子:199
  • 6回复贴,共1

初学shell经典编程

只看楼主收藏回复

1.使用for循环语句编写一段B-shell程序,完成显示用户注册目录下的a_sub, b_sub子目录下的所有C程序文件及其目标文件的列表。
2.编写一段shell程序完成:根据从键盘输入的学生成绩,显示相应的成绩标准(分出及格和优秀等)。
3.假设score.txt文件中保存了三个班级的学生考试成绩,请编写一段shell程序计算每个班级的学生人数与平均分。
解答:
首先欢迎来本人贴吧作客
以下是对该题目的一些说明
事实上并不难、尤其是结合了陈年老师上课的讲解、除了一些关于bc的用法没讲外,第1题直接按照书上的源码改一下就OK,第2题结合C语言学过的知识 也不是很难的 主要就是注意一点 shell里面不关于数值运算 所以 对于成绩的测试不宜用小数 不然无法用简单的方法比较大小 只能通过bc~~~第3题要偏难些 使用while循环加read读入文件 再对里面的各项进行统计 可以提示一下 score.txt里面的内容可以像/etc/passwd一样用一些特殊符号作为分割符 每个学生的姓名、班级、成绩就对应一行 然后对每一行进行域截取 就可以分别统计出每个班级的人数和成绩
虽然没有给出源码 尽管那样可以让大家很方便地说 但是那样就得不到学习的目的了 所以 凡事还是要自己多动动手 终究还是有好处的
祝大家顺利编出理想的代码~~~
另外欢迎常来作客、、、


IP属地:四川1楼2011-03-21 19:05回复
    这个有程序代码的么


    2楼2012-05-30 11:03
    回复
      2025-05-17 06:26:50
      广告
      #!/bin/bash
      # filename: foreach.sh
      for dirs in ~/a_sub ~/b_sub
      do
      ls -alR $dirs | grep -E '(\.c|\.obj)$'
      done


      IP属地:四川3楼2012-06-19 14:34
      回复
        #!/bin/bash
        # filename: grade_score.sh
        echo "Input you sore: "
        read score
        if (($score < 0 || $score > 100));
        then
        echo "Out of range"
        exit 1
        fi
        if (($score >= 0 && $score < 60));
        then
        echo "Bad"
        elif (($score >= 60 && $score < 70));
        then
        echo "Just pass"
        elif (($score >= 70 && $score < 80));
        then
        echo "Medium"
        elif (($score >= 80 && $score < 90));
        then
        echo "Good"
        elif(($score >= 90 && $score <= 100));
        then
        echo "Excellent"
        else
        echo "Error"
        fi


        IP属地:四川4楼2012-06-19 14:34
        回复
          #!/bin/sh
          # filename: averagescore.sh SCORE1=0
          SCORE2=0
          SCORE3=0
          NUMBER1=0
          NUMBER2=0
          NUMBER3=0 SAVEDIFS=$IFS
          IFS=:
          INPUT_FILE=score.txt
          while read NAME CLASS SCORE
          do
          case $CLASS in
          class1) NUMBER1=`expr $NUMBER1 + 1`
          SCORE1=`expr $SCORE1 + $SCORE`;;
          class2) NUMBER2=`expr $NUMBER2 + 1`
          SCORE2=`expr $SCORE2 + $SCORE`;;
          class3) NUMBER3=`expr $NUMBER3 + 1`
          SCORE3=`expr $SCORE3 + $SCORE`;;
          *) echo "'hasename $0':unknow class $CLASS";;
          esac
          done < $INPUT_FILE SCORE1=$(echo "scale=2; $SCORE1 / $NUMBER1" | bc)
          SCORE2=$(echo "scale=2; $SCORE2 / $NUMBER2" | bc)
          SCORE3=$(echo "scale=2; $SCORE3 / $NUMBER3" | bc) echo "|---------------------------------------|"
          echo "| class student num average score|"
          echo "|---------------------------------------|"
          echo "| 1 $NUMBER1 $SCORE1 |"
          echo "| 2 $NUMBER2 $SCORE2 |"
          echo "| 3 $NUMBER3 $SCORE3 |"
          echo "|---------------------------------------|" IFS=$SAVEDIFS
          


          IP属地:四川5楼2012-06-19 14:35
          回复
            陈年!?


            6楼2013-05-05 11:22
            回复
              陈年!


              IP属地:四川7楼2022-10-24 22:33
              回复