11-Shell(1)
干什么用#
- Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理
- 对于 JavaEE 和 Python 程序员来说,工作的需要,会要求你编写一些 Shell 脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本
- 对于大数据程序员来说,需要编写 Shell 程序来管理集群
Shell 解析器#
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,它接收应用程序/用户命令,然后调用 OS 内核。
用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
QuickStart#
Shell 脚本简单说明#
- Shell 脚本可理解为:命令的集合
- 脚本以
#!/bin/bash
开头 - 脚本需要有可执行权限
需求说明:创建一个 Shell 脚本,输出 Hello World!
脚本的常用执行方式#
方式1 (输入脚本的绝对路径或相对路径)
方式2 (sh+脚本)
第一种方式本质上是脚本需要自己执行,所以需要执行权限;第二种方式本质上是 bash 解析器帮你执行脚本,所以脚本本身不需要执行权限,其中
bash myShell.sh
命令中的 myShell.sh 是作为参数存在的。
Shell 的变量#
基本介绍#
定义#
- 基本语法
- 定义规则
返回值赋给变量#
- 使用反引号包裹命令,运行里面的命令,并把返回结果赋值给变量A
- A=$(ls -la) 等价于反引号方式
设置环境变量#
基本语法
export 变量名=变量值
将 Shell 变量输出为环境变量source 配置文件
让修改后的配置信息立即生效echo $变量名
查询环境变量的值
快速入门
位置参数变量#
基本介绍
当我们执行一个 Shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
比如: ./myShell.sh 100 200
,这就是一个执行 Shell 的命令行,可以在 myShell.sh 脚本中获取到参数信息。
基本语法
$n
n 为数字- $0 代表命令本身
- $1 ~ $9 代表第 1 到第 9 个参数
- 10 以上的参数需要用大括号包含,如
${10}
$*
这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体$@
这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待$#
这个变量代表命令行中所有参数的个数,常用于循环
案例
编写一个 Shell 脚本 positionPara.sh,在脚本中获取到命令行的各个参数信息
预定义变量#
就是 Shell 设计者事先已经定义好的变量,可以直接在 Shell 脚本中使用
基本语法
$$
当前进程的进程号 (PID)$!
后台运行的最后一个进程的进程号 (PID)$?
最后一次执行的命令的返回状态
应用实例
在一个 Shell 脚本中简单使用一下预定义变量
Shell 运算符#
基本语法#
$[运算式]
$((运算式))
expr ...
- expr 运算符、数据间都要有空格
- expr
+
,-
,\*
,/
,%
应用实例#
判断语句#
基本语法#
- 格式:
[ condition ]
// condition 前后要有空格!
常用判断条件#
- 两个整数的比较
=
字符串比较-lt
小于-le
小于等于-eq
等于-gt
大于-ge
大于等于-ne
不等于
- 按照文件权限进行判断
-r
有读的权限-w
有写的权限-x
有执行的权限
- 按照文件类型进行判断
-f
文件存在并且是一个常规的文件-e
文件存在-d
文件存在并是一个目录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?