当涉及Shell脚本编程时,有几个适合的函数相关的题目可以帮助我们理解函数的概念和用法。以下是一些我自己做的示例题目,仅供大家参考:
-
计算数字的阶乘: 编写一个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
-
判断素数: 编写一个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
-
简单的学生成绩管理系统: 编写一个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
-
-
文件操作函数: 编写一个Shell脚本,包括几个函数:
-
一个函数用于检查文件是否存在。
-
一个函数用于统计文件的行数。
-
一个函数用于搜索文件中包含指定关键词的行数。
-
-
字符串操作函数: 编写一个Shell脚本,包括几个函数:
-
一个函数用于计算字符串的长度。
-
一个函数用于反转字符串。
-
一个函数用于检查字符串是否为回文。
-
-
文件备份和归档: 编写一个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脚本中函数的基本应用,可以帮助理解函数的定义、参数传递、返回值等概念,并练习在实际问题中使用函数来组织和优化代码。