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

2023-12-21 06:11:54

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"

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

文章来源:https://blog.csdn.net/qq_47480932/article/details/135066605
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。