Shell编程从0到1学习笔记(Linux日常使用版) 核心定位:专为Linux日常使用设计,不搞复杂运维,重点解决「日常操作自动化」「重复操作简化」,学完就能用,适合新手入门,贴合日常办公、个人Linux使用场景。 前置准备:确保你的Linux系统(Ubuntu、CentOS等)已开启终端,无需额外安装软件,终端自带bash(默认Shell),直接可编写、运行脚本。 # 第一部分:Shell基础(必学,1-2天掌握) ## 1. 什么是Shell? Shell是Linux系统的“命令解释器”,我们在终端输入的命令(如ls、cd、mkdir),都是通过Shell解析后执行的。 Shell脚本:把一系列Linux命令写在一个文件里,批量执行,避免重复输入命令——这就是我们要学的核心,用脚本简化日常操作。 ## 2. 第一个Shell脚本(入门必写) ### 步骤1:创建脚本文件 终端输入命令,创建一个名为 `first.sh` 的脚本文件(.sh是Shell脚本的标准后缀,方便识别): ```bash touch first.sh ``` ### 步骤2:编写脚本内容 用文本编辑器(nano、vim均可,新手推荐nano,更简单)打开脚本: ```bash nano first.sh ``` 输入以下内容(每一行都有注释,看不懂的看注释): ```bash #!/bin/bash # 固定开头,告诉系统用bash解释这个脚本(必须写在第一行) # 我的第一个Shell脚本(#号后面是注释,不会执行,用于说明代码) echo "Hello Shell! 我在学习Linux日常脚本" # echo命令:输出括号里的内容 ls -l # 执行Linux命令:查看当前目录下的文件详情(日常常用) pwd # 执行Linux命令:查看当前所在目录(日常常用) ``` ### 步骤3:赋予执行权限 Linux默认创建的文件没有“执行权限”,需要手动赋予,终端输入: ```bash chmod +x first.sh ``` 解释:chmod是“修改权限”的命令,+x表示“增加执行权限”,这样脚本才能运行。 ### 步骤4:运行脚本 终端输入以下命令,运行脚本(两种方式,日常用第一种即可): ```bash # 方式1:直接运行(推荐,需在脚本所在目录) ./first.sh # 方式2:用sh命令运行(无需赋予执行权限,也能运行) sh first.sh ``` 运行效果:终端会先输出“Hello Shell! 我在学习Linux日常脚本”,然后显示当前目录的文件详情和当前所在路径——这就是最基础的脚本,把3个日常命令整合到一起,一键执行。 ## 3. 核心基础语法(日常使用高频) 重点记“日常能用得上”的,复杂语法暂时不学,避免劝退。 ### (1)变量(存储数据,简化重复输入) 日常场景:比如你经常进入某个固定目录(如~/Documents/notes),可以用变量存储路径,不用每次都输入完整路径。 语法规则: - 变量名=值(**等号两边不能有空格**,这是新手最容易犯的错) - 使用变量时,前面加$,如$变量名 - 变量名建议用大写(规范,区分大小写) 示例脚本(保存为var.sh): ```bash #!/bin/bash # 变量示例:存储常用目录路径 NOTE_DIR=~/Documents/notes # 存储笔记目录路径 echo "我的笔记目录:$NOTE_DIR" cd $NOTE_DIR # 进入笔记目录 ls -l # 查看笔记目录内容 ``` 运行后,会自动进入你的笔记目录并查看内容,不用每次手动输入cd ~/Documents/notes。 ### (2)read命令(接收用户输入,灵活交互) 日常场景:比如写一个脚本,让用户输入文件名,然后创建这个文件(比手动输入touch 文件名更灵活)。 语法:read -p "提示信息" 变量名(-p后面跟提示,告诉用户要输入什么) 示例脚本(保存为create_file.sh): ```bash #!/bin/bash # 接收用户输入,创建文件 read -p "请输入要创建的文件名(如test.txt):" FILE_NAME touch $FILE_NAME # 创建用户输入的文件 echo "文件 $FILE_NAME 已创建成功!" ls -l $FILE_NAME # 查看创建的文件详情 ``` 运行后,输入文件名(如test.txt),脚本会自动创建该文件,日常创建文件更快捷。 ### (3)if条件判断(根据条件执行不同操作) 日常场景:判断文件是否存在、判断目录是否存在,避免重复创建(比如创建文件前,先判断文件是否已存在,存在就提示,不存在就创建)。 核心语法(新手记这一种即可,足够日常使用): ```bash if [ 条件 ]; then # 条件成立时,执行的命令 else # 条件不成立时,执行的命令 fi # if的结束标记(必须写) ``` 常用条件(日常高频): - -f 文件名:判断文件是否存在(如 [ -f test.txt ]) - -d 目录名:判断目录是否存在(如 [ -d ~/Documents ]) - -eq:等于(如 [ $a -eq $b ],判断两个数字是否相等) - -ne:不等于(如 [ $a -ne $b ]) 示例脚本(保存为check_file.sh): ```bash #!/bin/bash # 判断文件是否存在,避免重复创建 read -p "请输入要判断的文件名:" FILE if [ -f $FILE ]; then echo "文件 $FILE 已存在!" else echo "文件 $FILE 不存在,正在创建..." touch $FILE echo "文件 $FILE 创建成功!" fi ``` 运行后,输入文件名,脚本会自动判断并处理,日常避免误操作(比如重复创建文件)。 ### (4)for循环(批量执行操作,日常最实用) 日常场景:批量创建文件、批量重命名文件、批量查看多个文件详情——避免重复输入命令,一键批量处理。 核心语法(新手常用两种): ```bash # 方式1:遍历指定的多个内容(如多个文件名) for 变量名 in 内容1 内容2 内容3; do # 对每个内容执行的命令 done # 方式2:遍历连续的序号(如1-10,适合批量创建文件) for 变量名 in {1..10}; do # 执行的命令 done ``` 示例1:批量创建10个文本文件(保存为batch_create.sh) ```bash #!/bin/bash # 批量创建10个文件:file_1.txt 到 file_10.txt for i in {1..10}; do touch file_$i.txt done echo "10个文件已批量创建完成!" ls -l file_*.txt # 查看创建的所有文件 ``` 示例2:批量重命名文件(保存为batch_rename.sh) ```bash #!/bin/bash # 把当前目录下所有.txt文件,重命名为note_1.txt、note_2.txt... count=1 # 定义一个计数器,用于序号 for file in *.txt; do # 遍历所有.txt文件 mv "$file" "note_$count.txt" # 重命名 ((count++)) # 计数器自增1 done echo "所有.txt文件已重命名完成!" ls -l note_*.txt ``` 这两个脚本是日常高频使用的,比如批量创建笔记文件、批量整理文件,一键搞定。 # 第二部分:Linux日常实用脚本(学完基础就练,直接用) 所有脚本均贴合Linux日常使用,复制就能运行,每一行都有注释,新手能看懂、能修改。 ## 脚本1:日常目录快速切换(简化cd命令) 场景:经常切换到多个固定目录(如笔记、下载、工作目录),不用每次输入完整路径。 ```bash #!/bin/bash # 快速切换目录脚本 echo "请选择要进入的目录:" echo "1. 笔记目录(~/Documents/notes)" echo "2. 下载目录(~/Downloads)" echo "3. 工作目录(~/Work)" read -p "输入序号(1/2/3):" num # 根据用户输入的序号,切换到对应目录 if [ $num -eq 1 ]; then cd ~/Documents/notes elif [ $num -eq 2 ]; then cd ~/Downloads elif [ $num -eq 3 ]; then cd ~/Work else echo "输入错误,没有这个选项!" fi # 切换后,显示当前目录和目录内容 echo "当前目录:$(pwd)" ls -l ``` 优化:可以把这个脚本放在~/bin目录下,赋予执行权限后,在任何目录输入脚本名就能运行,不用再找脚本路径。 ## 脚本2:文件查找与筛选(日常找文件更快捷) 场景:忘记文件存在哪里,根据文件名关键词查找(比手动输入find命令更简单)。 ```bash #!/bin/bash # 根据关键词查找文件 read -p "请输入要查找的文件关键词(如test、note):" KEYWORD # 从当前目录开始,查找所有包含关键词的文件,显示完整路径 find . -name "*$KEYWORD*" -type f echo "查找完成!以上是包含 '$KEYWORD' 的所有文件路径。" ``` 说明:. 表示当前目录,-type f 表示只查找文件(不找目录),*$KEYWORD* 表示“包含关键词的任意文件名”。 ## 脚本3:日志/大文件清理(避免磁盘占满) 场景:Linux使用久了,会产生很多日志文件或大文件,手动删除麻烦,脚本一键清理。 ```bash #!/bin/bash # 日常文件清理脚本(安全版,只清理指定类型文件) echo "正在清理无用文件..." # 1. 删除当前目录下7天前的.log日志文件(不会误删重要文件) find . -name "*.log" -mtime +7 -delete # 2. 删除下载目录下大于100M的临时文件(可修改大小) find ~/Downloads -name "*.tmp" -size +100M -delete echo "清理完成!" # 查看当前磁盘使用率,确认清理效果 df -h | grep /$ ``` 说明:-mtime +7 表示“修改时间超过7天”,-size +100M 表示“文件大小超过100M”,-delete 表示“删除找到的文件”,新手可先注释-delete,查看要删除的文件,确认无误后再取消注释。 ## 脚本4:批量复制文件到指定目录 场景:把多个文件(如所有.txt、.pdf文件)批量复制到备份目录,日常备份文件常用。 ```bash #!/bin/bash # 批量复制文件到备份目录 # 1. 定义备份目录(可修改为自己的备份路径) BACKUP_DIR=~/Backup/files # 2. 检查备份目录是否存在,不存在则创建 if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR echo "备份目录 $BACKUP_DIR 已创建" fi # 3. 批量复制当前目录下所有.txt和.pdf文件到备份目录 cp *.txt *.pdf $BACKUP_DIR echo "批量复制完成!" echo "备份目录内容:" ls -l $BACKUP_DIR ``` ## 脚本5:系统信息查看(快速了解Linux状态) 场景:想快速查看CPU、内存、磁盘使用率,不用输入多个命令,脚本一键显示。 ```bash #!/bin/bash # 系统信息快速查看脚本 echo "==================== Linux系统信息 ====================" echo "当前时间:$(date +"%Y-%m-%d %H:%M:%S")" # 显示当前时间 echo "CPU使用率:$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}')%" # CPU使用率 echo "内存使用率:$(free -h | grep 'Mem' | awk '{print $3 "/" $2}')" # 内存使用情况 echo "磁盘使用率:$(df -h | grep /$ | awk '{print $5}')" # 根目录磁盘使用率 echo "当前登录用户:$(whoami)" # 当前登录的用户名 echo "==================== 查看完成 ====================" ``` # 第三部分:新手注意事项(避坑指南) - 1. 脚本开头必须写 `#!/bin/bash`,否则可能无法正常执行(系统不知道用什么解释器)。 - 2. 赋值语句(如变量=值)**等号两边不能有空格**,这是新手最容易犯的错(比如错写为 num = 1,正确是 num=1)。 - 3. if条件判断中,`[ 条件 ]` 括号两边必须有空格(比如错写为[ -f test.txt ],正确是 [ -f test.txt ])。 - 4. 运行脚本时,若提示“权限不足”,记得用 `chmod +x 脚本名.sh` 赋予执行权限。 - 5. 新手建议先在虚拟机或个人Linux环境练习,不要在生产服务器上随意运行删除类脚本(避免误删重要文件)。 - 6. 遇到错误不用慌,终端会提示错误信息(比如“command not found”是命令写错,“No such file or directory”是路径错误),对照错误信息修改即可。 # 第四部分:学习计划(新手1周搞定,贴合日常) ## Day1:熟悉Shell基础 - 掌握脚本的创建、赋予权限、运行方法(写第一个脚本first.sh) - 学会变量的定义和使用(写var.sh脚本) ## Day2:学习交互与判断 - 掌握read命令(接收用户输入,写create_file.sh) - 掌握if条件判断(写check_file.sh) ## Day3:学习for循环(批量操作) - 掌握两种for循环语法 - 练习批量创建、批量重命名脚本(batch_create.sh、batch_rename.sh) ## Day4-Day5:练习日常实用脚本 - 逐行看懂并运行第二部分的5个实用脚本 - 尝试修改脚本(比如修改备份目录、修改清理文件的条件) ## Day6-Day7:综合练习 - 结合所学,写一个自己的日常脚本(比如“一键备份笔记+清理临时文件”) - 遇到问题,对照笔记排查错误,熟练掌握脚本的编写和运行 # 第五部分:补充说明(日常使用延伸) 1. 脚本保存位置:建议创建一个专门的脚本目录(如~/shell_scripts),把所有脚本放在里面,方便管理。 2. 快捷运行:把脚本目录添加到系统环境变量(echo "export PATH=$PATH:~/shell_scripts" >> ~/.bashrc),之后在任何目录输入脚本名就能运行,不用输入./脚本名。 3. 不用死记语法:日常使用中,记住常用脚本的写法,遇到忘记的语法,对照这篇笔记查找即可,多用多练自然就记住了。 4. 进阶方向:如果后续需要更复杂的操作,再学习sed、grep、awk(文本处理三剑客),当前先掌握日常够用的基础即可。