从猜数字到批量建目录:5个趣味Shell脚本项目,带你玩转Linux命令行
从猜数字到批量建目录5个趣味Shell脚本项目带你玩转Linux命令行Linux命令行给人的印象往往是冰冷、晦涩的但当你真正走进它的世界会发现这里充满了创造力和乐趣。想象一下用几行代码就能让计算机和你玩猜数字游戏或者瞬间创建50个规范命名的目录——这不是魔法而是Shell脚本的魅力所在。今天我们就从五个趣味项目入手让命令行学习变成一场充满成就感的游戏。1. 猜数字游戏当终端变成游乐场猜数字可能是最经典的编程入门项目但在Shell中实现它你会感受到即时反馈的快乐。这个脚本的核心在于$RANDOM变量的使用它会生成一个0-32767之间的随机数target$((RANDOM % 100)) # 生成0-99的随机数但我们可以做得更好。试试给游戏增加难度级别echo 选择难度 echo 1. 简单 (0-50) echo 2. 中等 (0-100) echo 3. 困难 (0-200) read -p 请输入选择: level case $level in 1) max50 ;; 2) max100 ;; 3) max200 ;; *) max100 ;; esac target$((RANDOM % max))进阶技巧添加尝试次数限制比如最多10次记录最佳成绩到文件使用figlet命令美化输出文字提示在比较数字前用[[ $guess ~ ^[0-9]$ ]]验证输入是否为数字避免脚本出错。2. 批量目录创建一键搭建项目结构手动创建几十个相似目录是件枯燥的事而Shell脚本能让它变得轻而易举。原始脚本已经展示了基础功能但实际工作中我们可能需要更复杂的结构base_dirproject_$(date %Y%m%d) mkdir -p $base_dir/{src,doc,test,log} # 创建带日期戳的用户目录 for i in {1..50}; do mkdir -p $base_dir/users/user${i}_$(date %m%d) chmod 754 $base_dir/users/user${i}_$(date %m%d) done实用改进添加目录存在性检查允许通过参数指定目录数量和前缀生成目录结构报告tree $base_dir | head -n 103. 数学计算器Shell中的数字魔术Shell虽然不以数学计算见长但处理基础运算绰绰有余。让我们扩展基础计算器功能#!/bin/bash show_menu() { echo 科学计算器 echo 1. 四则运算 echo 2. 幂运算 echo 3. 平方根 echo 4. 三角函数需要bc read -p 请选择: choice } calculate() { case $1 in ) echo $2 $3 | bc ;; -) echo $2 - $3 | bc ;; *) echo $2 * $3 | bc ;; /) echo scale2; $2 / $3 | bc ;; ^) echo $2 ^ $3 | bc ;; sqrt) echo scale2; sqrt($2) | bc -l ;; esac }扩展思路添加计算历史记录功能支持复数运算需要额外工具图形化界面用dialog或zenity4. 模式打印用代码绘制艺术打印三角形是理解循环控制的绝佳练习。让我们升级这个项目打印更多有趣图案#!/bin/bash print_diamond() { size$1 for ((i1; isize; i)); do for ((jsize; ji; j--)); do echo -n done for ((k1; k2*i-1; k)); do echo -n * done echo done for ((isize-1; i1; i--)); do for ((jsize; ji; j--)); do echo -n done for ((k1; k2*i-1; k)); do echo -n * done echo done } echo 选择图案 echo 1. 三角形 echo 2. 菱形 echo 3. 棋盘 read -p 请输入选择: pattern case $pattern in 1) rows5 for ((i1; irows; i)); do for ((j1; jrows-i; j)); do echo -n done for ((k1; k2*i-1; k)); do echo -n * done echo done ;; 2) print_diamond 5 ;; 3) for ((i1; i8; i)); do for ((j1; j8; j)); do if (( (ij) % 2 0 )); then echo -n █ else echo -n fi done echo done ;; esac创意扩展使用ANSI颜色代码让图案彩色化读取用户输入实时调整图案大小将图案保存为ASCII艺术文件5. 自动化任务管理器Shell脚本的终极应用将多个小脚本组合起来可以创建一个实用的个人自动化系统。比如这个任务提醒器#!/bin/bash task_file$HOME/.tasks add_task() { echo $(date %Y-%m-%d %H:%M): $* $task_file } show_tasks() { if [ -s $task_file ]; then echo 待办事项 cat -n $task_file else echo 没有待办事项 fi } clean_tasks() { $task_file } case $1 in add) shift; add_task $ ;; list) show_tasks ;; clean) clean_tasks ;; *) echo 用法: ${0##*/} [add|list|clean] ;; esac系统集成建议添加到cron定时检查与邮件系统集成发送提醒添加任务优先级标记# 每天上午9点检查任务 0 9 * * * /path/to/taskmgr list | mail -s 今日任务 userexample.com将这些脚本保存在~/bin目录并添加到PATH中你就拥有了一个个性化的命令行工具集。每次打开终端都能感受到自己创造的便利。Shell脚本最迷人的地方在于它能让计算机按照你的思维方式工作而不是相反。