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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念