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之后不换行,等待用户输入用户名。
- 输出
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
|