1 应用场景
shell脚本主要是为了减少重复性的工作,可以通过组合常用命令、控制结构、函数等实现各种任务的自动化。
系统管理与运维 自动化部署 定时任务和调度 批量处理任务 自动化测试 数据处理与转换 用户管理与权限控制 网络和系统监控
2、Shell变量
2.1 用户定义变量
变量名 | 描述 | 示例 |
---|---|---|
USER_NAME | 用户定义变量 | USER_NAME="liyb" |
FILE_PATH | 用户定义变量 | FILE_PATH="/home/user/file.txt" |
2.2 环境变量
变量名 | 描述 | 示例 |
---|---|---|
HOME | 当前用户的家目录 | echo $HOME |
PATH | 系统可执行文件路径 | echo $PATH |
USER | 当前用户名 | echo $USER |
SHELL | 当前使用的shell程序 | echo $SHELL |
PWD | 当前工作目录 | echo $PWD |
LANG | 系统的语言和地区设置 | echo $LANG |
HOSTNAME | 当前主机名 | echo $HOSTNAME |
2.3 特殊变量
变量名 | 描述 | 示例 |
---|---|---|
$0 | 脚本的名称 | echo $0 — 输出脚本文件名 |
2... | 脚本传递的参数 | echo 2 — 输出第一个和第二个参数 |
$# | 脚本传递的参数个数 | echo $# — 输出参数个数 |
$@ | 所有传递给脚本的参数(保留空格) | echo "$@" — 输出所有参数 |
$* | 所有传递给脚本的参数(作为一个字符串) | echo "$*" — 输出所有参数(空格分隔) |
$? | 上一个命令的退出状态码 | echo $? |
$$ | 当前脚本的进程 ID | echo $$ |
$! | 最近在后台运行的命令的进程 ID | echo $! |
2.4 只读变量
变量名 | 描述 | 示例 |
---|---|---|
readonly | 使变量成为只读,不能修改 | readonly MY_VAR="Hello World" MY_VAR="New Value"(会报错) |
2.5 数组变量
变量名 | 描述 | 示例 |
---|---|---|
fruits | 定义一个数组变量 | fruits=("Apple" "Banana" "Cherry") |
${fruits[0]} | 访问数组中的第一个元素 | echo ${fruits[0]} |
${#fruits[@]} | 获取数组的长度 | echo ${#fruits[@]} |
${fruits[@]} | 打印数组中的所有元素 | echo ${fruits[@]} |
注意:fruits名称可以随意,只是个数组名字
2.6 命令替换(Command Substitution)
变量名 | 描述 | 示例 |
---|---|---|
$(command) | 命令替换,将命令的输出作为变量的值 | DATE=DATE |
2.7 引用和转义
变量名 | 描述 | 示例 |
---|---|---|
" | 双引号,允许变量扩展,保留空格 | echo "$HOME" |
' | 单引号,禁止变量扩展,按字面值输出 | echo '$HOME' |
\ | 转义字符,用于转义特殊字符 | echo "Hello $USER" |
3 文件测试表达式
有两种方式:
使用 test 命令:
test <表达式>
复制
使用 [ ](推荐,语法更常用):
[ <表达式> ]
复制
3.1 常用操作符
操作符 | 描述 | 示例 |
---|---|---|
-e | 检测文件是否存在 | [ -e file ] |
-f | 检测是否为普通文件 | [ -f file ] |
-d | 检测是否为目录 | [ -d directory ] |
-L | 检测是否为符号链接 | [ -L link ] |
-r | 检测文件是否可读 | [ -r file ] |
-w | 检测文件是否可写 | [ -w file ] |
-x | 检测文件是否可执行 | [ -x file ] |
-s | 检测文件是否非空 | [ -s file ] |
-z | 检测字符串是否为空 | [ -z string ] |
-b | 检测是否为块设备 | [ -b file ] |
3.2 逻辑运算符
操作符 | 描述 | 示例 |
---|---|---|
-a | 逻辑与(AND) | [ -r file -a -w file ] |
-o | 逻辑或(OR) | [ -r file -o -w file ] |
! | 逻辑非(NOT) | [ ! -e file ] |
3.3 文件比较
操作符 | 描述 | 示例 |
---|---|---|
-nt | file1 比 file2 新 | [ file1 -nt file2 ] |
-ot | file1 比 file2 旧 | [ file1 -ot file2 ] |
-ef | 是否为同一文件 | [ file1 -ef file2 ] |
3.4 整数二元比较操作符
操作符 | 描述 | 示例 |
---|---|---|
-eq | 等于 | [ "b" ] |
-ne | 不等于 | [ "b" ] |
-lt | 小于 | [ "b" ] |
-le | 小于或等于 | [ "b" ] |
-gt | 大于 | [ "b" ] |
-ge | 大于或等于 | [ "b" ] |
以上是一些常用的操作符总结,后续将分享实用的shell脚本。
如有帮助,请点个赞和“在看”!如有不足,敬请指出!感谢你的关注与支持。
路虽远,行则将至!
事虽难,做则必成!共勉!
Linux上有趣的8个命令,你玩过几个? 万字长文:K8S命令详解汇总【自用珍藏版】 手把手教你搭建企业级Harbor镜像仓库 【Docker系列知识】常用命令大全汇总 Linux的150个常用命令汇总,运维大神不一定全部掌握! Linux文件处理三剑客详解(运维高手必备) Nginx配置文件详解及常用功能配置(实用率90%)
文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
PLSQL编程
芃芃
46次阅读
2025-03-29 21:17:38
使用 MySQLShell 9.2.0 进行数据增量导出
阮胜昌
36次阅读
2025-04-01 17:39:38
实现一个 MySQL 配置对比脚本需要考虑哪些细节?
爱可生开源社区
27次阅读
2025-04-23 11:19:35
mysql8 mgr 脚本
大圣11
27次阅读
2025-04-07 16:23:24
使用lftp实现断点续传的功能
zayki
26次阅读
2025-04-22 17:31:54
《解码闭包:前端开发者的进阶必修课》
程序员阿伟
18次阅读
2025-04-18 22:00:26
OpenSSH源码离线一键升级脚本分享(含安装包)
小周的数据库进阶之路
11次阅读
2025-04-24 09:53:06
在 PowerShell 中更改环境变量
老柴杂货铺
11次阅读
2025-04-12 02:07:58
严防脚本泄露!教你几个让 Shell 脚本仅自己可见的加密技巧
小周的数据库进阶之路
9次阅读
2025-04-25 10:10:49
在 Shell 中按当前日期创建文件夹
运维笔谈
8次阅读
2025-04-11 07:03:20