shell编程的几个函数相关题目

当涉及Shell脚本编程时,有几个适合的函数相关的题目可以帮助我们理解函数的概念和用法。以下是一些我自己做的示例题目,仅供大家参考:

  1. 计算数字的阶乘: 编写一个Shell脚本,包括一个函数来计算给定数字的阶乘。要求用户输入一个数字,并输出其阶乘的结果。

    #!/bin/bash
    #计算数字阶乘
    function factorial(){
      read -p "请输入一个大于1的整数:" result
      if [ $result -le 0 ];then
        echo "输入的参数错误!"
      elif [ $result -gt 0 ];then
        sum=1
        for((i=1;i<="$result";i++));do
          sum=$((sum * i))
        done
        echo "$sum"
      fi
    }
    factorial
    
  2. 判断素数: 编写一个Shell脚本,包括一个函数来判断给定的数字是否为素数。要求用户输入一个数字,并输出是否是素数的信息。

    #判断素数
    function isPrime(){
      su=$1
      A=1
      if [ $su -le 0 ];then
        echo "输入的参数错误!"
        break
      elif [ $su -gt 0 ];then
        for((i=2;i<"$su";i++));do
          if [ $((su % i)) -eq 0 ];then
            A=0
            break
          fi
        done
    
        if [ "$A" -eq 1 ];then
          echo "$su是素数"
        else
          echo "$su不是素数"
        fi
      fi
    }
    isPrime $1
    
  3. 简单的学生成绩管理系统: 编写一个Shell脚本,实现一个简单的学生成绩管理系统,包括以下功能:

    • 添加学生信息(姓名、成绩)。

    • 显示所有学生信息。

    • 根据学生姓名查询成绩。

    • 计算平均成绩。

      #!/bin/bash
      STUDENTINFO=/root/test/student.txt
      function save_student(){
        NAME=$1
        SCORE=$2
        echo "$NAME, $SCORE" >> $STUDENTINFO
      }
      #显示学生信息
      function show(){
        echo "+++++++++++++++"
        cat $STUDENTINFO
        echo "+++++++++++++++"
      }
      function show_by_name(){
        NAME=$1
        grep $NAME $STUDENTINFO
      
      }
      function cal_avg(){
        TOTAL=0
        COUNT=0
        while IFS="," read -r NAME SCORE;do
          TOTAL=$[$TOTAL + $SCORE]
          COUNT=$[$COUNT + 1]
        done < $STUDENTINFO
        avg=$[$TOTAL / $COUNT]
        echo "平均值:$avg"
      }
      while true;do
        echo "******************菜单***************"
        echo "*1-添加学生                    2-显示"
        echo "*3-查询学生            4-计算平均成绩"
        echo "*5-退出"
        echo "*************************************"
        read -p "请选择:" OPTION
        case $OPTION in
          1)
            read -p "请输入学生名字:" NAME
            read -p "请输入学生成绩:" SCORE
            save_student $NAME $SCORE
          ;;
          2)
            show
          ;;
          3)
            read -p "请输入查询的学生名字:" NAME
            show_by_name $NAME    
          ;;
          4)
            cal_avg
          ;;
          5)
            break
          ;;
          *)
        esac
      done
  4. 文件操作函数: 编写一个Shell脚本,包括几个函数:

    • 一个函数用于检查文件是否存在。

    • 一个函数用于统计文件的行数。

    • 一个函数用于搜索文件中包含指定关键词的行数。

  5. 字符串操作函数: 编写一个Shell脚本,包括几个函数:

    • 一个函数用于计算字符串的长度。

    • 一个函数用于反转字符串。

    • 一个函数用于检查字符串是否为回文。

  6. 文件备份和归档: 编写一个Shell脚本,包括一个函数来备份指定目录的文件,并根据日期创建归档文件。要求用户输入备份的目录和目标备份路径。

    #!/bin/bash
    STUDENTINFO=/root/test/student.txt
    function check(){
      if [ -f "$file" ];then
        echo "该文件$file存在。"
      else
        echo "该文件$file不存在。"
      fi
    }
    function statistics(){
      if [ ! -f "$filename" ];then
        echo "文件$filename不存在"
        exit 1
      fi
      line_count=$(wc -l < "$filename")
      echo "该文件的行数为:$line_count"
    }
    function search(){
      if [ ! -f "$filename" ];then
        echo "文件$filename不存在"
        exit 1
      fi
      line_count=$(grep -w "$keyword" "$filename" | wc -l)
      if [ $line_count -eq 0 ];then
        echo "文件$filename的关键词行数为:0"
      else 
        echo "文件$filename的关键词行数为:$line_count"
      fi 
    }
    function sum(){
      length=$(expr length "$str")
      echo "字符串长度为$length"
    }
    function rollback(){
      reversed=""
      for (( i=${#str}-1; i>=0; i--));do
        reversed="$reversed${str:$i:1}"
      done
    }
    function palindrome(){
      rollback
     if [ $str -eq $reversed ];then
       echo "$str是回文数。"
     else
       echo "$str不是回文数"
     fi
    } 
    function backup(){
      local current_date=$(date +%Y-%m-%d)
      local backup_file="${target_path}/backup-${current_date}.tar.gz"
      tar -cvzf "$backup_file" "$backup_dir"
      echo "备份已完成,备份文件为:$backup_file"
    }
    while true;do
      echo "******************菜单***********************************"
      echo "*1-检查文件是否存在                        2-统计文件行数"
      echo "*3-搜索文件中包含指定关键词行数          4-计算字符串行数"
      echo "*5-反转字符串                        6-检查字符串是否回文"
      echo "*7-备份指定目录文件                               8-退出"
      echo "*************************************"
      read -p "请选择:" OPTION
      case $OPTION in
        1)
          read -p "请输入要查找的文件名或路径:" file
          check
        ;;
        2)
          read -p "请输入文件名:" filename
          statistics
        ;;
        3)
          read -p "请输入文件名:" filename
          read -p "请输入关键词:" keyword
          search
        ;;
        4)
          read -p "请输入字符串:" str
          sum
        ;;
        5)
          read -p "请输入字符串:" str
          rollback
          echo "反转后的字符串为:$reversed"
        ;;
        6)
          read -p "请输入字符串:" str
          palindrome
        ;;
        7)
          read -p "输入要备份的目录:" backup_dir
          read -p "输入要备份的目标路径:" target_path
          if [ ! -d "$backup_dir" ];then
            echo "该目录不存在!"
            exit 1
          fi
          backup
        ;;
        8)
          break
        ;;
      esac
    done

后面三个函数我都写到了一个.sh文件中,做了一个菜单页面,这些题目涵盖了Shell脚本中函数的基本应用,可以帮助理解函数的定义、参数传递、返回值等概念,并练习在实际问题中使用函数来组织和优化代码。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值