Linux|shell编程|实验总结|期末考查试题

2023-12-21 21:45

本文主要是介绍Linux|shell编程|实验总结|期末考查试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.编写一个Linux的shell编程,计算输入两个年份之间的闰年之和。

#!/bin/bash# 获取用户输入的两个年份
echo "请输入两个年份,用空格隔开:"
read year1 year2# 检查输入的年份是否有效
if [[ ! $year1 =~ ^[0-9]+$ ]] || [[ ! $year2 =~ ^[0-9]+$ ]]; thenecho "输入的年份格式不正确"exit 1
fiif (( year1 > year2 )); thenecho "第一个年份必须小于第二个年份"exit 1
fi# 计算闰年之和
sum=0
for((year=$year1; year<=$year2; year++)); doif (( year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) )); then(( sum++ ))fi
done# 输出闰年之和
echo "从 $year1 年到 $year2 年之间的闰年之和是 $sum"

2.编写一个linux编程,要求用*号打印一个倒梯形。

#!/bin/bash# 获取倒梯形的行数
echo "请输入倒梯形的高度:"
read height# 创建一个与高度相同的二维数组
stars=( )
for ((i=0; i<height; i++)); dostars[$i]=""
done# 在二维数组中填充星号
for ((i=0; i<height; i++)); dofor ((j=0; j<height-i; j++)); dostars[$i]+="*"done
done# 打印二维数组
for ((i=0; i<height; i++)); doecho ${stars[$i]}
done

3.编写一个linux的shell编程,实现列出当前目录里的目录和文件的个数的功能。

#!/bin/bash# 获取当前目录的路径
current_dir=$(pwd)# 使用 find 命令列出当前目录下的所有文件和目录
files_and_dirs=$(find "$current_dir" -maxdepth 1 -type f -o -type d)# 将 find 命令的输出按换行符分割,并保存到数组中
files_and_dirs_array=( $files_and_dirs )# 将数组的长度作为文件和目录的总数
total_files_and_dirs=${#files_and_dirs_array[@]}# 分别计算文件和目录的数量
num_files=0
num_dirs=0
for file_or_dir in "${files_and_dirs_array[@]}"; doif [ -f "$file_or_dir" ]; then((num_files++))elif [ -d "$file_or_dir" ]; then((num_dirs++))fi
done# 打印文件和目录的数量
echo "当前目录 $current_dir 中有 $total_files_and_dirs 个文件和目录,其中包括 $num_files 个文件和 $num_dirs 个目录。"

4.编写一个linux的shell编程,实现打印九九乘法表的功能。

#!/bin/bash# 打印九九乘法表的标题
echo "九九乘法表:"# 使用 for 循环遍历 1 到 9
for i in $(seq 1 9); do# 使用嵌套的 for 循环遍历 1 到 9for j in $(seq 1 9); do# 计算 i 和 j 的乘积product=$((i * j))# 格式化输出,确保每列的宽度相同printf "%2d x %-2d = %-3d  " $i $j $productdone# 换行echo
done

5.编写一个linux的shell编程,实现在当前目录中添加test1,test2, test3文件,并把这三个文件分别剪切到dir1,dir2,dir3目录中去。

#!/bin/bash# 创建test1、test2和test3文件
touch test1 test2 test3# 创建dir1、dir2和dir3目录
mkdir dir1 dir2 dir3# 将test1文件剪切到dir1目录
mv test1 dir1# 将test2文件剪切到dir2目录
mv test2 dir2# 将test3文件剪切到dir3目录
mv test3 dir3

6.编写一个linux的shell编程,制作一个计算器,能进行加减乘除运算。

#!/bin/bash# 获取用户输入的两个数字和运算符
echo "请输入第一个数字:"
read num1echo "请输入第二个数字:"
read num2echo "请输入运算符(+、-、*、/):"
read operator# 根据运算符进行计算
case $operator in"+")result=$((num1 + num2));;"-")result=$((num1 - num2));;"*")result=$((num1 * num2));;"/")if [ $num2 -eq 0 ]; thenecho "除数不能为0"elseresult=$((num1 / num2))fi;;*)echo "无效的运算符";;
esac# 打印计算结果
if [ -n "$result" ]; thenecho "计算结果为:$result"
fi

7.编写一个linux的shell编程,计算100以内的质数和。

#!/bin/bash# 初始化质数和的变量
sum=0# 遍历100以内的数字
for ((i=2; i<=100; i++)); do# 假设i是质数is_prime=1# 从2到i的平方根遍历for ((j=2; j<=$(echo "sqrt($i)" | bc); j++)); do# 如果i被j整除,则i不是质数if (( i % j == 0 )); thenis_prime=0breakfidone# 如果i是质数,则将i添加到质数和中if (( is_prime == 1 )); thensum=$((sum + i))fi
done# 打印质数和
echo "100以内的质数和为:$sum"

8.编写linux的shell编程,把100以内能被3整除但不能被5整除的数列出来,3个一行。

#!/bin/bash# Initialize a counter
i=1# Iterate until i is greater than 100
while [ $i -le 100 ]
do# Check if i is divisible by 3 and not divisible by 5if [ $((i % 3)) -eq 0 ] && [ $((i % 5)) -ne 0 ]then# Print i, followed by a space characterprintf "%3d " $i# Increment the counter by 3((i += 3))# Check if the counter is greater than 100if [ $i -gt 100 ]then# Print a newline character to terminate the lineechofielse# Increment the counter by 1((i += 1))fi
done

9.编写linux的shell编程,制作一个电话本,要有添加,删除,查询,修改,退出功能。

#!/bin/bash# 定义电话本数据结构
declare -A phonebook# 定义主菜单函数
function main_menu() {echo "-----------------------------------------"echo "电话本"echo "-----------------------------------------"echo "1. 添加联系人"echo "2. 删除联系人"echo "3. 查询联系人"echo "4. 修改联系人"echo "5. 退出"echo "-----------------------------------------"echo "请选择一个选项:"
}# 定义添加联系人函数
function add_contact() {echo "请输入联系人姓名:"read nameecho "请输入联系人电话号码:"read phone_numberphonebook[$name]=$phone_numberecho "联系人已添加。"
}# 定义删除联系人函数
function delete_contact() {echo "请输入要删除的联系人姓名:"read nameif [ -z "${phonebook[$name]}" ]; thenecho "联系人不存在。"elseunset phonebook[$name]echo "联系人已删除。"fi
}# 定义查询联系人函数
function query_contact() {echo "请输入要查询的联系人姓名:"read nameif [ -z "${phonebook[$name]}" ]; thenecho "联系人不存在。"elseecho "联系人电话号码:${phonebook[$name]}"fi
}# 定义修改联系人函数
function modify_contact() {echo "请输入要修改的联系人姓名:"read nameif [ -z "${phonebook[$name]}" ]; thenecho "联系人不存在。"elseecho "请输入新的联系人电话号码:"read new_phone_numberphonebook[$name]=$new_phone_numberecho "联系人已修改。"fi
}# 主循环
while true; domain_menuread choicecase $choice in1)add_contact;;2)delete_contact;;3)query_contact;;4)modify_contact;;5)echo "退出电话本。"exit 0;;*)echo "无效的选项。";;esac
done

10.编写linux的shell编程,制作一个石头,剪刀,布的游戏。

#!/bin/bash# 定义游戏手势
declare -a gestures=("石头" "剪刀" "布")# 定义游戏规则
declare -A rules=(["石头"]["剪刀"]="石头赢"["石头"]["布"]="布赢"["剪刀"]["石头"]="石头赢"["剪刀"]["布"]="剪刀赢"["布"]["石头"]="布赢"["布"]["剪刀"]="剪刀赢"
)# 获取玩家手势
function get_player_gesture() {echo "请输入您的手势(石头、剪刀或布):"read player_gesturewhile [[ ! "${gestures[@]}" =~ "$player_gesture" ]]; doecho "无效的手势,请重新输入:"read player_gesturedone
}# 获取电脑手势
function get_computer_gesture() {computer_gesture=${gestures[$RANDOM % 3]}
}# 判断胜负
function judge_winner() {if [[ $player_gesture == $computer_gesture ]]; thenecho "平局"elif [[ ${rules[$player_gesture][$computer_gesture]} == "$player_gesture赢" ]]; thenecho "玩家赢"elseecho "电脑赢"fi
}# 打印结果
function print_result() {echo "玩家手势:$player_gesture"echo "电脑手势:$computer_gesture"echo "胜负结果:$(judge_winner)"
}# 主循环
while true; doget_player_gestureget_computer_gestureprint_resultecho "是否继续游戏(y/n)?"read continue_gameif [[ $continue_game != "y" ]]; thenbreakfi
done

11.编写linux的shell编程,打印一个五角星

#!/bin/bash
#打印五角星
echo   "输出五角星图案"
for (( i1=1;i1<6;i1++ )) #这是五角星的上面一个角
dolet c=19-$i1for ((  j1=1;$j1<$c;j1++ ))  #这是空格do
echo  -n " "done
let d=2*$i1-1
for (( k1=1;$k1<=$d;k1++ ))  #这是“*”do
echo -n "*"
done
echodonefor (( i2=1;i2<5;i2++ )) #这是五角星的中间两个角do
let e=3*$i2-3for  (( j2=1;$j2<$e;j2++ ))do
echo -n " "
done
let f=42-6*$i2
for (( k2=1;$k2<=$f;k2++ ))do
echo -n "*" 
done
echodonefor (( i3=1;i3<3;i3++ ))  #这是中间与下部相接的部分do
let g=12-$i3for (( j3=1;j3<$g;j3++ ))do
echo  -n " "donelet h=12+2*$i3
for (( k3=1;k3<=$h;k3++ ))do
echo -n "*" done
echodonefor (( i4=1;i4<5;i4++ ))  #这是五角星的下面两个角do
let o=10-$i4for (( j4=1;j4<$o;j4++ ))do
echo  -n " "done
let p=10-2*$i4
for (( k4=1;k4<=$p;k4++ ))do
echo -n  "*" done
let q=6*$i4-3
for (( m4=1;m4<$q;m4++ ))do
echo -n " " done
for (( n4=1;n4<=$p;n4++ ))do
echo  -n  "*"
done
echo
doneecho "    *                        *" #盖上角

12.编写一个shell编程,制作一个猜数字游戏。

#!/bin/bash# 生成随机数
random_number=$((RANDOM % 100 + 1))# 获取用户猜测的数字
echo "请输入您猜测的数字:"
read guess# 判断用户猜测的数字是否正确
while [[ $guess != $random_number ]]; doif [[ $guess -lt $random_number ]]; thenecho "您的猜测太小了,请重新猜测:"elseecho "您的猜测太大了,请重新猜测:"firead guess
done# 告诉用户猜对了
echo "恭喜您,您猜对了!"

13.编写linux的shell编程,打印一个10以内的加法表。

#!/bin/bash# 打印加法表的标题
echo "10以内的加法表:"# 使用 for 循环遍历 1 到 10
for ((i=1; i<=10; i++)); do# 使用嵌套的 for 循环遍历 1 到 10for ((j=1; j<=10; j++)); do# 计算 i 和 j 的和sum=$((i + j))# 格式化输出,确保每列的宽度相同printf "%2d + %-2d = %-3d  " $i $j $sumdone# 换行echo
done

14.编写linux的shell编程,打印一个10以内的减法表。

#!/bin/bash# 打印减法表的标题
echo "10以内的减法表:"# 使用 for 循环遍历 1 到 10
for ((i=1; i<=10; i++)); do# 使用嵌套的 for 循环遍历 1 到 10for ((j=1; j<=10; j++)); do# 计算 i 和 j 的差difference=$((i - j))# 格式化输出,确保每列的宽度相同printf "%2d - %-2d = %-3d  " $i $j $differencedone# 换行echo
done

15.编写linux的shell编程,把输入的数字进行求和。

#!/bin/bash# 获取用户输入的数字
echo "请输入要求和的数字,用空格分隔:"
read numbers# 将数字分割成数组
numbers_array=( $numbers )# 初始化求和结果
sum=0# 遍历数组中的每个数字并将其添加到求和结果中
for number in "${numbers_array[@]}"; dosum=$((sum + number))
done# 打印求和结果
echo "求和结果为:$sum"

16.编写linux的shell编程,打印一个等腰三角形。

#!/bin/bash# 获取用户输入的行数
echo "请输入等腰三角形的高度:"
read height# 打印等腰三角形的每一行
for ((i=1; i<=height; i++)); do# 计算当前行的空格数和星号数num_spaces=$((height - i))num_stars=$((2 * i - 1))# 打印空格for ((j=1; j<=num_spaces; j++)); doecho -n " "done# 打印星号for ((j=1; j<=num_stars; j++)); doecho -n "*"done# 换行echo
done

17.编写linux的shell编程,求1-1000中偶数之和。

#!/bin/bash# 初始化偶数之和
even_sum=0# 遍历1到1000
for ((i=1; i<=1000; i++)); do# 如果i是偶数,则将其添加到偶数之和中if (( i % 2 == 0 )); theneven_sum=$((even_sum + i))fi
done# 打印偶数之和
echo "1-1000中偶数之和为:$even_sum"

18.编写linux的shell编程,要求输入一个数字,输出一个*的菱形。

#!/bin/bash# 获取用户输入的行数
echo "请输入菱形的高度:"
read height# 打印菱形的每一行
for ((i=1; i<=height; i++)); do# 计算当前行的空格数和星号数num_spaces=$((height - i))num_stars=$((2 * i - 1))# 打印空格for ((j=1; j<=num_spaces; j++)); doecho -n " "done# 打印星号for ((j=1; j<=num_stars; j++)); doecho -n "*"done# 换行echo# 打印菱形的下半部分for ((i=$((height-1)); i>=1; i--)); do# 计算当前行的空格数和星号数num_spaces=$((i))num_stars=$((2 * i - 1))# 打印空格for ((j=1; j<=num_spaces; j++)); doecho -n " "done# 打印星号for ((j=1; j<=num_stars; j++)); doecho -n "*"done# 换行echodone

19.编写linux的shell编程,要求输入一个数字,以数字输出一个直角三角形。

#!/bin/bash# 获取用户输入的行数
echo "请输入直角三角形的高度:"
read height# 打印直角三角形的每一行
for ((i=1; i<=height; i++)); do# 打印i个数字for ((j=1; j<=i; j++)); doecho -n "$j"done# 换行echo
done

20.编写linux的shell编程,输入一个年份,判断是不是闰年。

#!/bin/bash# 获取用户输入的年份
echo "请输入年份:"
read year# 判断年份是否能被4整除
if (( year % 4 == 0 )); then# 判断年份是否能被100整除if (( year % 100 == 0 )); then# 判断年份是否能被400整除if (( year % 400 == 0 )); thenecho "$year是闰年。"elseecho "$year不是闰年。"fielseecho "$year是闰年。"fi
elseecho "$year不是闰年。"
fi

21.编写一个linux的shell编程,要求输入一个数字n并计算1~n的和,如果输入的数字小于1,则重新输入,直到输入正确的数字为止。

#!/bin/bash# 循环获取用户输入的数字,直到输入正确的数字
while true; doecho "请输入一个数字n:"read n# 判断n是否大于等于1if (( n >= 1 )); thenbreakelseecho "输入的数字必须大于等于1,请重新输入。"fi
done# 计算1到n的和
sum=0
for ((i=1; i<=n; i++)); dosum=$((sum + i))
done# 打印1到n的和
echo "1到$n的和为:$sum"

22.编写linux的shell编程,要求批量创建用户user_00,user_01,.....,user_99.

#!/bin/bash# 定义要创建的用户名的前缀
user_prefix="user_"# 循环创建用户
for i in $(seq -f "%02g" 0 99); dousername="${user_prefix}${i}"useradd -m $username
done

23.编写linux的shell编程,求1-1000以内的奇数之和。

#!/bin/bash# 初始化奇数之和
odd_sum=0# 遍历1到1000
for ((i=1; i<=1000; i++)); do# 如果i是奇数,则将其添加到奇数之和中if (( i % 2 != 0 )); thenodd_sum=$((odd_sum + i))fi
done# 打印奇数之和
echo "1-1000以内的奇数之和为:$odd_sum"

兄弟们,花了点时间整理了一下,希望对兄弟有用,提醒一点的是做练习的时候,写代码就别把代码里面的中文全部写进去了,写一点就好。哪里有问题的,还请兄弟们指正!!!

这篇关于Linux|shell编程|实验总结|期末考查试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/521600

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu