Linux|shell编程|实验总结|期末考查试题
1.编写一个Linux的shell编程,计算输入两个年份之间的闰年之和。
#!/bin/bash
# 获取用户输入的两个年份
echo "请输入两个年份,用空格隔开:"
read year1 year2
# 检查输入的年份是否有效
if [[ ! $year1 =~ ^[0-9]+$ ]] || [[ ! $year2 =~ ^[0-9]+$ ]]; then
echo "输入的年份格式不正确"
exit 1
fi
if (( year1 > year2 )); then
echo "第一个年份必须小于第二个年份"
exit 1
fi
# 计算闰年之和
sum=0
for((year=$year1; year<=$year2; year++)); do
if (( 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++)); do
stars[$i]=""
done
# 在二维数组中填充星号
for ((i=0; i<height; i++)); do
for ((j=0; j<height-i; j++)); do
stars[$i]+="*"
done
done
# 打印二维数组
for ((i=0; i<height; i++)); do
echo ${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[@]}"; do
if [ -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 到 9
for j in $(seq 1 9); do
# 计算 i 和 j 的乘积
product=$((i * j))
# 格式化输出,确保每列的宽度相同
printf "%2d x %-2d = %-3d " $i $j $product
done
# 换行
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 num1
echo "请输入第二个数字:"
read num2
echo "请输入运算符(+、-、*、/):"
read operator
# 根据运算符进行计算
case $operator in
"+")
result=$((num1 + num2))
;;
"-")
result=$((num1 - num2))
;;
"*")
result=$((num1 * num2))
;;
"/")
if [ $num2 -eq 0 ]; then
echo "除数不能为0"
else
result=$((num1 / num2))
fi
;;
*)
echo "无效的运算符"
;;
esac
# 打印计算结果
if [ -n "$result" ]; then
echo "计算结果为:$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 )); then
is_prime=0
break
fi
done
# 如果i是质数,则将i添加到质数和中
if (( is_prime == 1 )); then
sum=$((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 5
if [ $((i % 3)) -eq 0 ] && [ $((i % 5)) -ne 0 ]
then
# Print i, followed by a space character
printf "%3d " $i
# Increment the counter by 3
((i += 3))
# Check if the counter is greater than 100
if [ $i -gt 100 ]
then
# Print a newline character to terminate the line
echo
fi
else
# 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 name
echo "请输入联系人电话号码:"
read phone_number
phonebook[$name]=$phone_number
echo "联系人已添加。"
}
# 定义删除联系人函数
function delete_contact() {
echo "请输入要删除的联系人姓名:"
read name
if [ -z "${phonebook[$name]}" ]; then
echo "联系人不存在。"
else
unset phonebook[$name]
echo "联系人已删除。"
fi
}
# 定义查询联系人函数
function query_contact() {
echo "请输入要查询的联系人姓名:"
read name
if [ -z "${phonebook[$name]}" ]; then
echo "联系人不存在。"
else
echo "联系人电话号码:${phonebook[$name]}"
fi
}
# 定义修改联系人函数
function modify_contact() {
echo "请输入要修改的联系人姓名:"
read name
if [ -z "${phonebook[$name]}" ]; then
echo "联系人不存在。"
else
echo "请输入新的联系人电话号码:"
read new_phone_number
phonebook[$name]=$new_phone_number
echo "联系人已修改。"
fi
}
# 主循环
while true; do
main_menu
read choice
case $choice in
1)
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_gesture
while [[ ! "${gestures[@]}" =~ "$player_gesture" ]]; do
echo "无效的手势,请重新输入:"
read player_gesture
done
}
# 获取电脑手势
function get_computer_gesture() {
computer_gesture=${gestures[$RANDOM % 3]}
}
# 判断胜负
function judge_winner() {
if [[ $player_gesture == $computer_gesture ]]; then
echo "平局"
elif [[ ${rules[$player_gesture][$computer_gesture]} == "$player_gesture赢" ]]; then
echo "玩家赢"
else
echo "电脑赢"
fi
}
# 打印结果
function print_result() {
echo "玩家手势:$player_gesture"
echo "电脑手势:$computer_gesture"
echo "胜负结果:$(judge_winner)"
}
# 主循环
while true; do
get_player_gesture
get_computer_gesture
print_result
echo "是否继续游戏(y/n)?"
read continue_game
if [[ $continue_game != "y" ]]; then
break
fi
done
11.编写linux的shell编程,打印一个五角星。
#!/bin/bash
#打印五角星
echo "输出五角星图案"
for (( i1=1;i1<6;i1++ )) #这是五角星的上面一个角
do
let c=19-$i1
for (( j1=1;$j1<$c;j1++ )) #这是空格
do
echo -n " "
done
let d=2*$i1-1
for (( k1=1;$k1<=$d;k1++ )) #这是“*”
do
echo -n "*"
done
echo
done
for (( i2=1;i2<5;i2++ )) #这是五角星的中间两个角
do
let e=3*$i2-3
for (( j2=1;$j2<$e;j2++ ))
do
echo -n " "
done
let f=42-6*$i2
for (( k2=1;$k2<=$f;k2++ ))
do
echo -n "*"
done
echo
done
for (( i3=1;i3<3;i3++ )) #这是中间与下部相接的部分
do
let g=12-$i3
for (( j3=1;j3<$g;j3++ ))
do
echo -n " "
done
let h=12+2*$i3
for (( k3=1;k3<=$h;k3++ ))
do
echo -n "*"
done
echo
done
for (( i4=1;i4<5;i4++ )) #这是五角星的下面两个角
do
let o=10-$i4
for (( 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
done
echo " * *" #盖上角
12.编写一个shell编程,制作一个猜数字游戏。
#!/bin/bash
# 生成随机数
random_number=$((RANDOM % 100 + 1))
# 获取用户猜测的数字
echo "请输入您猜测的数字:"
read guess
# 判断用户猜测的数字是否正确
while [[ $guess != $random_number ]]; do
if [[ $guess -lt $random_number ]]; then
echo "您的猜测太小了,请重新猜测:"
else
echo "您的猜测太大了,请重新猜测:"
fi
read guess
done
# 告诉用户猜对了
echo "恭喜您,您猜对了!"
13.编写linux的shell编程,打印一个10以内的加法表。
#!/bin/bash
# 打印加法表的标题
echo "10以内的加法表:"
# 使用 for 循环遍历 1 到 10
for ((i=1; i<=10; i++)); do
# 使用嵌套的 for 循环遍历 1 到 10
for ((j=1; j<=10; j++)); do
# 计算 i 和 j 的和
sum=$((i + j))
# 格式化输出,确保每列的宽度相同
printf "%2d + %-2d = %-3d " $i $j $sum
done
# 换行
echo
done
14.编写linux的shell编程,打印一个10以内的减法表。
#!/bin/bash
# 打印减法表的标题
echo "10以内的减法表:"
# 使用 for 循环遍历 1 到 10
for ((i=1; i<=10; i++)); do
# 使用嵌套的 for 循环遍历 1 到 10
for ((j=1; j<=10; j++)); do
# 计算 i 和 j 的差
difference=$((i - j))
# 格式化输出,确保每列的宽度相同
printf "%2d - %-2d = %-3d " $i $j $difference
done
# 换行
echo
done
15.编写linux的shell编程,把输入的数字进行求和。
#!/bin/bash
# 获取用户输入的数字
echo "请输入要求和的数字,用空格分隔:"
read numbers
# 将数字分割成数组
numbers_array=( $numbers )
# 初始化求和结果
sum=0
# 遍历数组中的每个数字并将其添加到求和结果中
for number in "${numbers_array[@]}"; do
sum=$((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++)); do
echo -n " "
done
# 打印星号
for ((j=1; j<=num_stars; j++)); do
echo -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 )); then
even_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++)); do
echo -n " "
done
# 打印星号
for ((j=1; j<=num_stars; j++)); do
echo -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++)); do
echo -n " "
done
# 打印星号
for ((j=1; j<=num_stars; j++)); do
echo -n "*"
done
# 换行
echo
done
19.编写linux的shell编程,要求输入一个数字,以数字输出一个直角三角形。
#!/bin/bash
# 获取用户输入的行数
echo "请输入直角三角形的高度:"
read height
# 打印直角三角形的每一行
for ((i=1; i<=height; i++)); do
# 打印i个数字
for ((j=1; j<=i; j++)); do
echo -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 )); then
echo "$year是闰年。"
else
echo "$year不是闰年。"
fi
else
echo "$year是闰年。"
fi
else
echo "$year不是闰年。"
fi
21.编写一个linux的shell编程,要求输入一个数字n并计算1~n的和,如果输入的数字小于1,则重新输入,直到输入正确的数字为止。
#!/bin/bash
# 循环获取用户输入的数字,直到输入正确的数字
while true; do
echo "请输入一个数字n:"
read n
# 判断n是否大于等于1
if (( n >= 1 )); then
break
else
echo "输入的数字必须大于等于1,请重新输入。"
fi
done
# 计算1到n的和
sum=0
for ((i=1; i<=n; i++)); do
sum=$((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); do
username="${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 )); then
odd_sum=$((odd_sum + i))
fi
done
# 打印奇数之和
echo "1-1000以内的奇数之和为:$odd_sum"
兄弟们,花了点时间整理了一下,希望对兄弟有用,提醒一点的是做练习的时候,写代码就别把代码里面的中文全部写进去了,写一点就好。哪里有问题的,还请兄弟们指正!!!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!