Shell脚本编写

📅 2026/7/22 5:04:26
Shell脚本编写
目录一、为什么要学Shell二、Shell基础入门2.1 什么是Shell2.2 Shell三大功能2.3 常见Shell类型三、Shell脚本编写与执行3.1 Shell脚本的基本构成3.2 四种执行方式四、变量4.1 变量的概念4.2 变量的引用与输出4.3 echo命令高级用法五、特殊变量赋值5.1 双引号和单引号5.2 反撇号与命令替换5.3 read命令交互式输入六、变量运算6.1 expr命令基础6.2 $[]和$(())6.3 let命令直接修改变量6.4 bc计算器浮点运算七、变量类型和作用范围7.1 自定义变量和环境变量7.2 只读变量7.3 位置变量7.4 预定义变量7.5 export命令八、重定向与管道8.1 输出重定向8.2 输入重定向8.3 管道符九、总结一、为什么要学ShellShell脚本能让电脑自动干活。比如每天检查服务器状态、备份数据、写脚本一键搞定省时省力二、Shell基础入门2.1 什么是ShellShell 用户与内核之间的翻译官。用户 → Shell翻译→ Linux内核 → 执行结果 → Shell翻译→ 用户。2.2 Shell三大功能功能说明命令翻译把命令翻译成内核能懂的指令输入输出管理管理数据从哪来到哪去编程能力把命令写成脚本自动执行2.3 常见Shell类型/bin/bash # 默认ShellCentOS/RHEL都用它/bin/sh # bash的祖先已软链接到bash/bin/tcsh # C Shell增强版查看当前Shellcat /etc/shells# 查看系统支持的所有Shellecho $SHELL# 查看当前使用的Shell三、Shell脚本编写与执行3.1 Shell脚本的基本构成三部分#!/bin/bash ← 脚本声明# 注释信息 ← 注释说明命令语句 ← 实际执行例1、创建文件2、输入内容3、运行3.2 四种执行方式方式命令需要权限运行环境变量保留路径执行./script.sh需要子Shell否bash执行bash script.sh不需要子Shell否source执行source script.sh不需要当前Shell是重定向执行sh script.sh不需要子Shell否四、变量4.1 变量的概念变量 数据的储物柜# 格式变量名变量值等号两边不能有空格规则1、只能包含字母、数字、下划线2、不能以数字开头3、 区分大小写4.2 变量的引用与输出基本引用 变量前加$符号什么情况使用{}4.3 echo命令高级用法选项速查选项作用-n不换行-e识别转义字符常用转义字符\n → 换行\t → 制表符Tab\c → 不换行\b → 退格\\ → 输出\本身\$ → 输出$本身五、特殊变量赋值5.1 双引号和单引号双引号可以解析变量。单引号不可以解析变量。5.2 反撇号与命令替换作用把命令输出存到变量中写法反撇号$()5.3 read命令交互式输入1、基本用法2、用-p选项简化推荐常用选项选项作用-p显示提示-n限制字符数-s静默输入-t超时秒数六、变量运算6.1 expr命令基础直接两个变量相加是字符串拼接并不是数学运算用expr做数学运算expr规则1、运算符两边必须有空格2、乘法需要转义字符转义运算符表格运算符含义加法-减法*乘法/除法%取余6.2 $[]和$(())$[]和$(())比expr更加方便且乘法不需要转义1、expr方法2、$[]方式3、$(())方式三种方式对比方式乘法转义变量$expr需要需要$[]不需要可以省略$(())不需要可以省略6.3 let命令直接修改变量let可以直接修改变量本身let命令独有的幂运算6.4 bc计算器浮点运算expr只能计算整数bc可以运算小数1、计算表达式echo scale3; 10/3 | bc # 3.333echo 5^2 | bc # 25平方echo sqrt(16) | bc # 4平方根2、bc逻辑运算返回0或1echo 3 5 | bc # 输出0假echo 3 5 | bc # 输出1真echo 10 10 | bc # 输出1真七、变量类型和作用范围7.1 自定义变量和环境变量对比类型说明自定义变量用户自己定义私有环境变量系统预定义的公共常见环境变量echo $USER # 当前用户名echo $HOME # 用户主目录echo $PWD # 当前工作目录echo $SHELL # 默认Shellecho $LANG # 系统语言echo $RANDOM # 随机数0-32767echo $UID # 用户ID7.2 只读变量1、只读变量在定义时设置2、已有变量设置为只读变量3、无法删除7.3 位置变量$0 → 脚本名称test.sh$1 → 第一个参数张三$2 → 第二个参数123456$3 → 第三个参数...$# → 参数总数2$* → 所有参数整体$ → 所有参数独立例子7.4 预定义变量预定义常用变量变量含义$?上一条命令的返回状态0成功非0失败$$当前进程的进程号$!最后一个后台进程的进程号7.5 export命令默认变量只在当前Shell有效用export导出变量八、重定向与管道8.1 输出重定向基本重定向1、覆盖2、追加3、分离正确和错误输出8.2 输入重定向从文件读取多行输入8.3 管道符管道符把多个命令串联起来将前一个命令的输出作为后一个命令的输入常用管道命令命令功能示例grep过滤cat file \| grep errorsort排序cat file \| sortuniq去重cat file \| uniq -cwc统计cat file \| wc -lcut提取列cat file \| cut -d: -f1九、总结Shell概述Shell是用户与内核间的翻译官学它就是为了把重复操作写成脚本实现自动化省时省力。脚本构成与变量脚本以#!/bin/bash开头声明解释器#写注释。变量用$引用双引号内可解析变量单引号原样输出反撇号或$()做命令替换read实现交互输入echo -e控制输出格式。四种执行方式./script.sh和bash script.sh都在子Shell运行前者需权限source script.sh在当前Shell运行变量会保留sh script.sh是重定向执行也在子Shell。关键区别是子Shell vs 当前Shell。变量系统自定义变量私有export后可变为环境变量供子进程继承readonly设只读。$1~$n是位置参数$?判断命令成败$$取当前进程号。运算与文本处理整数运算用expr需转义*、$[]或$(())浮点用bc。输出重定向输入重定向管道|串联命令配合grep过滤、sort排序、uniq -c统计、wc -l计数、cut切列形成强大的文本处理链