网站首页 > 技术文章 正文
下面是**Shell(Bash)语法的常用知识点总结**,适合初学者和日常脚本编写参考。内容涵盖变量、判断、循环、函数、重定向、正则、数组等常见用法。
---
# Shell(Bash)语法速查总结
## 一、变量与赋值
```bash
name="World" # 赋值(等号两边不能有空格)
echo $name # 取变量值,推荐${name}防止歧义
num=123
```
## 二、命令替换
```bash
now=$(date) # 推荐用$()而不是反引号``
filename=$(ls | head -n 1)
```
## 三、算术运算
```bash
a=5; b=3
sum=$((a + b)) # 8
let c=a*b
((d=a-b))
```
## 四、字符串操作
```bash
str="hello world"
echo ${str:0:5} # hello, 字符串切片
echo ${#str} # 字符串长度
echo ${str/world/Bash} # 替换为hello Bash
```
## 五、数组
```bash
arr=(a b "c d")
echo ${arr[1]} # b
echo ${arr[@]} # 遍历所有元素
len=${#arr[@]} # 元素个数
```
## 六、条件判断
### 1. **文件判断**
```bash
[ -f file ] # 是否为普通文件
[ -d dir ] # 是否为目录
[ -e path ] # 文件或目录是否存在
[ -s file ] # 文件非空
```
### 2. **数值比较**
```bash
[ "$a" -eq "$b" ] # 等于
[ "$a" -ne "$b" ] # 不等于
[ "$a" -gt "$b" ] # 大于
[ "$a" -lt "$b" ] # 小于
```
### 3. **字符串比较**
```bash
[ "$a" = "$b" ] # 相等
[ "$a" != "$b" ] # 不等
[ -z "$a" ] # 字符串为空
[ -n "$a" ] # 字符串非空
```
### 4. **if语句**
```bash
if [ 条件 ]; then
# 代码
elif [ 其他条件 ]; then
# 其他
else
# 默认
fi
```
## 七、循环
### 1. **for循环**
```bash
for i in 1 2 3; do
echo $i
done
for file in *.txt; do
echo $file
done
```
### 2. **while循环**
```bash
count=0
while [ $count -lt 5 ]; do
echo $count
((count++))
done
```
### 3. **until循环**
```bash
until [ $count -ge 5 ]; do
echo $count
((count++))
done
```
## 八、函数
```bash
myfunc() {
echo "Hello $1"
}
myfunc Tom
```
## 九、读取输入
```bash
read var
read -p "请输入内容:" var
```
## 十、case语句(多分支)
```bash
read -p "输入y/n: " ans
case $ans in
y|Y) echo "yes";;
n|N) echo "no";;
*) echo "other";;
esac
```
## 十一、重定向与管道
```bash
ls > out.txt # 标准输出重定向
ls >> out.txt # 追加
cat file 2> err.log # 标准错误重定向
sort < file
ls | grep txt # 管道
```
## 十二、通配符与正则
- `*` :任意长度字符串
- `?` :单个任意字符
- `[abc]`:a或b或c
- `{a,b,c}`:a、b、c之一
正则可用于`grep`、`sed`、`awk`等
---
## 十三、参数处理
```bash
echo $0 # 脚本名
echo $1 # 第1个参数
echo $@ # 所有参数
echo $# # 参数个数
```
---
## 十四、退出与返回值
```bash
exit 0 # 正常退出
exit 1 # 异常退出
# 上一条命令的返回值:$?
```
---
## 十五、常用命令
- `ls`, `cp`, `mv`, `rm`, `find`, `grep`, `awk`, `sed`, `cut`, `sort`, `uniq`, `head`, `tail`
- `chmod`, `chown`, `touch`, `cat`, `echo`
---
## 十六、注释
```bash
# 这是注释
```
---
## 十七、特殊符号
- `&&` :前一命令成功才执行后一条
- `||` :前一命令失败才执行后一条
- `;` :无论前一命令成败都执行后一条
- `\` :续行
---
## 十八、调试
```bash
bash -x script.sh # 跟踪执行
set -x # 脚本内开启调试
set +x # 脚本内关闭调试
```
---
# 结语
掌握上面这些语法,你就可以编写和理解绝大多数常见 Shell 脚本,自动化日常任务和数据处理。
如需深入学习某一部分(如正则、数组、函数参数等),欢迎继续提问!
- 上一篇: 为什说破壳漏洞会带来一场全球服务器的浩劫
- 下一篇: 解决运维痛点磁盘空间不足(磁盘运营100%)
猜你喜欢
- 2025-09-09 使用Docker搭建一个Mail邮箱系统_docker搭建邮件服务器
- 2025-09-09 Linux必学技能 | 17个案例带运维小白快速精通Awk命令,拿来即用
- 2025-09-09 稳定的Claude Code渠道,白嫖100刀
- 2025-09-09 如何写出安全的、基本功能完善的Bash脚本
- 2025-09-09 如何限制访问域名之外的请求都禁止访问,包括域名对应的ip
- 2025-09-09 代理 IP 地址与端口:核心概念、匹配逻辑及常见配置误区
- 2025-09-09 Linux重复操作太痛苦?Shell脚本让你1分钟搞定1小时活
- 2025-06-30 记录一次彻底清除挖矿病毒(挖矿 清退)
- 2025-06-30 linux计划任务管理(linux计划任务设置)
- 2025-06-30 Linux基本命令—修改命令别名(linux永久修改别名)
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)