Shell脚本基础实验

任务一:优雅退出select循环

修改select菜单脚本,实现如下要求:

  • 添加一个菜单项exit
  • 用户选择其他菜单项的时候就输出选择的值
  • 选择exit菜单项则退出脚本
  • 不使用Ctrl+C结束脚本

代码及结果截图写入实验报告。

图片描述

图片描述

任务二:计算阶乘

请编写Shell脚本,实现n阶乘的计算。提示用户输入n值,然后输出n阶乘计算结果。

为了避免计算时间过长,可以限制n值上限,例如15

代码及结果截图写入实验报告。

图片描述

图片描述

任务三:打印杨辉三角形

请使用Shell脚本的循环和输出控制,打印杨辉三角形。

用户输入n值,作为杨辉三角形的层数。也可以限制最大值。

例如:n=7的杨辉三角形

图片描述

图片描述
图片描述

任务四:多种样式的进度条

进度条用于帮助用户直观理解一个任务进行的进度。

1.请你设计一个用字符(-|/)构建的旋转进度条,伴随模拟进度百分比数值的变化,至100%时结束。

例如:

时刻1显示:- (1%)

时刻2显示:/ (20%)

在同一位置逐个显示上述四个符号,可以实现旋转进度条。

进度百分比模拟即可,无需反应实际任务情况。

代码及结果截图写入实验报告。

#!/bin/bash
# 初始化变量
progress=1
bar='-'

symbols=('-' '/' '\' '|')

while [ $progress -le 100 ]; do
percent=$((progress*25))
echo -ne "\r[$bar] $percent%"
bar=${symbols[$(( (progress-1) % 4 ))]}
progress=$((progress+1))
sleep 1
if [ $progress -gt 4 ]; then
break
fi
done

# 进度完成,打印完成信息并换行
echo -e "\r[Done] 100%"

2. 设计一款进度条

进度条有多种样式,请发挥想象或者见过的进度条,用Shell脚本编程实现另外至少一款进度条。

图片描述
图片描述

#!/bin/bash

TOTAL=50
PROGRESS_CHAR="#"
EMPTY_CHAR="-"

read -p "请输入进度条的总进度(例如100): " max_progress

if [ $max_progress -le 0 ]; then
echo "进度必须大于0"
exit 1
fi

current_progress=0

print_progress_bar() {
progress=$((current_progress * TOTAL / max_progress))
empty=$((TOTAL - progress))

progress_bar=$(printf "%0.s${PROGRESS_CHAR}" $(seq 1 $progress))
empty_bar=$(printf "%0.s${EMPTY_CHAR}" $(seq 1 $empty))

printf "\r[%-${TOTAL}s] %d%%" "${progress_bar}${empty_bar}" $((current_progress * 100 / max_progress))
}


while [ $current_progress -le $max_progress ]; do
print_progress_bar
current_progress=$((current_progress + 1))
sleep 0.05
done

echo -e "\n完成!"

任务五:模拟Linux登录shell的字符界面

login:stu01
password:_

要求:

  • login之后不换行,等待用户输入用户名。
  • 输出password:,不换行等待用户输入口令
  • 判断用户名和口令是否正确
  • 相应输出不同信息
    • 正确的打印欢迎信息
    • 错误的提示登录失败

图片描述

#!/bin/bash

# 预设的正确用户名和密码
CORRECT_USERNAME="stu01"
CORRECT_PASSWORD="password123"

# 提示用户输入用户名
echo -n "login: "
read username

# 提示用户输入密码(不回显输入的字符)
echo -n "password: "
read -s password
echo

# 验证用户名和密码
if [ "$username" == "$CORRECT_USERNAME" ] && [ "$password" == "$CORRECT_PASSWORD" ]; then
echo "Welcome, $username!"
else
echo "Login failed"
fi