Shell基础 前言:Shell 是连接用户与 Linux 内核的命令解释器Shell 脚本可整合命令实现运维工作自动化。本文系统梳理 Shell 编程基础辨析易混知识点搭建基础知识框架。目录前言:一、Shell1.1 Shell 定义1.2 Shell 常见类型1.3 shell应用场景1.4 查看 Shell 相关命令二、Shell 脚本2.1 基础概念2.2 创建脚本流程2.3 脚本四种执行方式对比2.4 脚本编写与执行案例三、 变量基础3.1 变量的引用与输出3.2 echo 命令高级用法3.3echo命令案例四、特殊变量赋值4.1 引号区别4.2 反撇号与命令替换4.3 read 交互式输入命令4.4各参数案例五、变量运算5.1 expr5.2 $[]与$(())5.3 let5.4 bc六、 变量类型与作用范围6.1 变量分类6.2 位置变量脚本传参6.3 预定义特殊变量6.4 export 变量导出控制子 Shell 可见性七、重定向与管道7.1 标准输入、标准输出与标准错误输出7.2 输出重定向7.3 输入重定向7.4 管道操作7.5 综合应用示例八、总结一、Shell1.1 Shell 定义命令解释器介于用户和内核之间具备命令翻译、输入输出管理、编程能力。命令翻译接收用户输入的指令将人类可读的命令转换为操作系统内核能够识别执行的指令充当用户与系统内核之间的翻译桥梁。输入输出管理统一管理程序标准输入、标准输出与错误输出支持重定向、管道等功能灵活控制数据流向实现信息过滤、日志保存等操作。编程具备完整程序编写能力支持变量、分支判断、循环、函数等语法可将多条命令组合成自动化脚本实现复杂运维任务批量处理。1.2 Shell 常见类型Shell 类型说明使用场景/bin/bash默认 ShellCentOS/RHEL 主流使用★Linux 系统日常、脚本开发/bin/shbash 的 “祖先”现代系统软链接指向 bash兼容老式 UNIX 脚本/bin/tcshC Shell 增强版极少使用1.3 shell应用场景自动化软件安装摒弃手动一步步下载、编译、配置、启动服务的操作编写脚本实现软件一键部署可统一配置 yum/apt 源、自动处理依赖、修改配置文件、设置开机自启实现多台服务器标准化批量安装。批量用户管理面对大量服务器账号维护工作通过脚本批量创建、删除系统用户统一设置初始密码、分配用户权限、限定登录权限与家目录快速完成账号生命周期管理大幅减少逐条操作的重复工作量。数据备份自动定时打包日志、业务重要数据支持本地备份或远程同步至备份服务器脚本内可添加备份过期清理、备份文件完整性校验、异常失败告警机制保障数据定期、可靠留存。服务器运维监控持续采集服务器 CPU、内存、磁盘、负载、端口、进程运行状态当资源占用超出阈值、服务意外停止时自动触发告警通知运维人员实现 7×24 小时无人值守基础监控。1.4 查看 Shell 相关命令cat /etc/shells # 查看系统支持的所有Shell1-1echo $SHELL # 查看当前正在使用的Shell1-2二、Shell 脚本2.1 基础概念shell 脚本 命令清单逐行执行脚本组成脚本声明解释器 注释说明 命令语句2.2 创建脚本流程创建文件 → 添加执行权限 → 检查语法 → 执行脚本2.3 脚本四种执行方式对比表格执行方式命令示例是否需要权限运行环境是否保留变量路径执行./script.sh✅ 需要子 Shell❌bash 执行bash script.sh❌ 不需要子 Shell❌source 执行source script.sh❌ 不需要当前 Shell✅重定向执行sh script.sh❌ 不需要子 Shell❌2.4 脚本编写与执行案例编写vim file.sh2-1执行1路径执行2-22bash执行2-33source 执行2-44重定向执行2-5三、 变量基础变量可以理解为数据的储物柜3.1 变量的引用与输出基本引用变量前加$符号figure classimageimg alt height75 srchttps://i-blog.csdnimg.cn/direct/63534e7c296d4492b16b19252879f1ca.png width835/3-1边界区分变量名称边界模糊时必须使用${变量名}界定3-23.2 echo 命令高级用法语法echo [选项] 内容表格参数作用示例效果-n不换行输出echo -n 第一行\n第二行-e识别转义字符echo -e 第一行\n第二行3-3常用转义符\n换行、\t制表符 (Tab)、\c不换行、\b退格、\\输出斜杠本身、\$输出 $ 符号3.3echo命令案例制作表格3-4四、特殊变量赋值特殊变量是 shell 自带只读变量存脚本 / 命令运行信息不能直接变量值修改4.1 引号区别双引号识别变量 name输出Z单引号不识别变量原样输出$name4-14.2 反撇号与命令替换反撇号把命令输出存入变量等价写法$(命令)4-24.3 read 交互式输入命令4.3.1基本用法4-34-4read 参数功能示例-p输出提示文字read -p 输入姓名 name-n限制输入字符数量read -n 3 age-s静默输入密码不回显read -s -p 密码 passwd-t设置输入超时秒数read -t 5 input4.4各参数案例read -p 输入姓名 name4-5read -n 3 age4-6read -s -p 密码 passwd4-7read -t 5 input4-8五、变量运算Shell 原生只支持整数运算浮点运算依赖bc工具,下表是一些常用的变量运算方式.运算方式特点示例expr运算符两侧必须空格* 需要转义expr $X \* $Y$[]仅计算不输出只支持整数echo $[2 * 3]$()仅计算不输出只支持整数echo $((2/3))let直接修改变量整数运算支持自增自减let num ; let numnum*2bc计算器支持浮点、乘方、开方、逻辑运算echo scale2;10/3bc5.1 exprexpr 是一款表达式计算工具它能完成表达式的求值操作。5-15.2 $[]与$(())比expr更简洁乘法不用转义5-25.3 letlet命令可以直接修改变量5-35.4 bcbc计算器——浮点运算5-4bc也可以进行逻辑运算,真返回1,假返回05-5六、 变量类型与作用范围6.1 变量分类自定义变量用户自行定义默认私有 例:name小赵figure classimageimg alt height80 isbindedloadtrue srchttps://i-blog.csdnimg.cn/direct/ea82c44a9efe4aa7b6218f2fd1159146.png width620/6-1环境变量系统预定义公共变量例变量名含义示例输出$USER当前登录用户名root$HOME当前用户家目录/root$PWD当前所在工作目录/etc / /usr/local$SHELL用户默认登录 Shell/bin/bash /$LANG系统语言编码zh_CN.UTF-8$RANDOM随机整数范围 0~3276715623$UID当前用户数字 ID0 (root) / 1000 (普通用户)只读变量readonly修饰无法修改6-26.2 位置变量脚本传参变量含义$0脚本本身名称$1-$9第 1~9 个参数$#参数总个数$*所有参数整体视为 1 段$所有参数参数相互独立6-3运行:6-4案例:创建用户脚本#!/bin/bash # 创建用户脚本 # 用法bash user.sh 用户名 密码 useradd $1 echo $2 | passwd --stdin $1执行验证:6-56.3 预定义特殊变量变量含义$?上一条命令返回状态0 成功非 0 失败$$当前进程 PID$!最后 1 个后台进程 PID测试脚本:#!/bin/bash # 测试上一条命令返回值 ls /etc /dev/null echo ls /etc 的返回值$? ls /abc /dev/null 21 echo ls /abc 的返回值$? echo echo 当前Shell进程PID$$ sleep 100 echo 后台进程PID$!执行:6-66.4 export 变量导出控制子 Shell 可见性默认变量只在当前Shell有效验证:6-7三种用法方式1先定义变量再导出name小赵export name6-8方式2定义同时直接导出export city邯郸6-9方式3取消导出子Shell无法读取该变量export -n city6-10七、重定向与管道7.1 标准输入、标准输出与标准错误输出Linux 三大基础数据流三条数据流水线文件描述符标准名称默认绑定设备核心作用说明0STDIN标准输入键盘程序读取输入数据的通道1STDOUT标准输出显示器程序正常运行结果的输出通道2STDERR标准错误输出显示器程序报错、异常信息的输出通道7.2输出重定向 覆盖把输出保存到文件覆盖原有内容 追加把输出追加到文件末尾7-17.3 输入重定向从文件读取cat file.txt 等价于cat file.txt# 输出到文件cat EOF file.txt这里自己写内容EOF7-27.4 管道操作管道把多个命令串联起常见的几个管道命令命令功能示例grep过滤cat file.txt | grep 4sort排序cat file.txt | sortuniq去重 / 统计cat file.txt | uniq -cwc统计行 / 字 / 字符cat file.txt | wc -lcut提取列cat file.txt | cut -d: -f1示例:7-37.5综合应用示例1自动化备份脚本7-42服务器健康检查脚本7-53批量用户管理7-6八、总结本文系统梳理 Shell 编程基础完整覆盖 Shell 基础定义、脚本运行、变量、运算、重定向与管道核心内容。Shell 是用户与 Linux 内核的命令解释器主流为 /bin/bash可通过 cat /etc/shells、echo $SHELL 查看系统支持及当前使用的 Shell。Shell 脚本有四种执行方式核心差异在于是否需要执行权限、运行环境及变量是否保留。变量是 Shell 核心引用用 $ 变量名边界模糊用 ${变量名}echo -n 不换行-e 识别转义字符。双引号识别变量单引号原样输出命令替换用反撇号或 $(命令)可存储命令执行结果。Shell 变量运算expr 需注意空格和转义\([]、\)(())、let 仅支持整数浮点运算依赖 bc。变量分自定义、环境、只读三类位置变量用于传参export 可控制变量在子 Shell 的可见性。Linux 有 0、1、2 三条标准数据流重定向用 覆盖、追加/dev/null 可丢弃输出。管道符 | 串联命令常用管道命令有 grep、sort 等可实现复杂文本处理。