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脚本。
如有帮助,请点个赞和“在看”!如有不足,敬请指出!感谢你的关注与支持。
路虽远,行则将至!
事虽难,做则必成!共勉!
往期精彩文章