今天细谈命令行语法、管道与重定向语法、以及Shell脚本语法,看起来不是很正式,但是但是咱就是说还是有千丝万缕的联系滴儿

文章大简介
-
命令行语法是单词,让你能发出基本指令。
-
管道与重定向是语法和连词,让你能将单词连成功能强大的复合句。
-
Shell脚本是篇章和逻辑,让你能撰写复杂的程序,实现完整的自动化任务。
题外话,学好Linux你得了解一下基本学习结构,端正好目标方针:
Linux核心语法体系学习路径
|
├── 核心理念
| ├── 一切皆文件
| ├── 单一职责,组合使用
| ├── 文本化与管道流
|
├── 第一层:命令行语法 (基础指令)
| ├── 结构 :命令 [选项] [参数]
| ├── 目的 :执行单一、明确的操作
| ├── 关键示例 :
| | ├→ ls (列出)
| | ├→ ls -l (列出,长格式)
| | ├→ ls -lh /home (列出指定路径,易读格式)
| | └→ cp -r source_dir/ dest_dir/ (递归复制)
|
├── 第二层:管道与重定向 (命令协作)
| ├── 设计哲学 :组合小程序,完成大任务
| ├── 核心操作符 :
| | ├── 管道 |
| | | └→ 例:ps aux | grep nginx(进程筛选)
| | |
| | ├── 重定向 > , >> , <
| | | ├→ ls > list.txt (输出到文件)
| | | ├→ echo "log" >> file.log (追加到文件)
| | | └→ sort < input.txt (从文件输入)
| |
| ├── 复杂流水线示例 :
| └→ grep ... | awk ... | sort | uniq -c | sort -nr | head -5
| (日志分析:筛选→提取→排序→统计→排序→展示)
|
└── 第三层:Shell脚本语法 (自动化编程)
├── 本质 :将命令、逻辑保存为可执行文件
├── 核心要素 :
| ├── 变量
| | └→ name="Linux"; 引用:$name
| |
| ├── 条件判断
| | └→ if [ -f "file" ]; then ... else ... fi
| |
| ├── 循环
| | └→ for i in {1..5}; do echo $i; done
| |
| ├── 函数
| | └→ my_func() { echo "Hello, $1"; }
| |
| └── 执行状态检查
| └→ $? (获取上一条命令的退出状态)
|
└── 完整脚本示例:backup.sh
├── 定义源/目标变量
├── 检查目录是否存在
├── 执行打包压缩
└── 根据结果输出成功/失败日志
一、 命令行语法:与系统对话的基本规则
这是所有Linux命令的基础结构,遵循一种通用的格式。
基本结构:
bash
text
命令 [选项] [参数]
命令:要执行的操作,如 ls(列出目录)、cp(复制)。
选项:用于修改命令行为的"开关",通常以 -(短选项)或 --(长选项)开头。例如 -l 代表"长格式",--help 代表显示帮助。
参数:命令作用的对象,如文件名、目录名。
设计含义(说人话):一个命令只做好一件事,通过选项来丰富其功能。
举例说明:
基础命令:ls。单独使用,列出当前目录下的文件和目录。
bash
带选项:ls -l
-l 是选项,表示以"详细列表"格式显示。
输出会包含文件权限、所有者、大小、修改时间等信息。
bash
带参数:ls /home
/home 是参数,表示列出指定目录(/home)下的内容。
bash
组合使用:ls -lh /var/log
-l:详细列表。
-h:与 -l 结合,以人类可读的格式(K, M, G)显示文件大小。
bash
/var/log:要查看的目录参数。
这条命令的作用是:以详细且易读的格式,列出 /var/log 目录下的所有文件。
二、 管道与重定向语法:命令的协作与输入输出控制
这是Linux强大功能的精髓,允许将多个简单命令像流水线一样组合起来,完成复杂任务,并灵活控制数据的流向。
核心概念:
管道 |:将一个命令的标准输出,作为下一个命令的标准输入。
bash
举例:ps aux | grep nginx
ps aux:列出系统所有进程的详细信息。
|:将其输出的全部文本,传递给下一个命令。
grep nginx:在接收到的文本中,搜索包含"nginx"的行。
最终效果:快速过滤出所有与nginx相关的进程信息。
重定向:改变命令输入/输出的默认来源和目标。
1.>:将命令的输出覆盖写入到文件。ls > list.txt(将ls结果保存到文件,原内容被清空)。
2.>>:将命令的输出追加到文件末尾。echo "New log entry" >> app.log。
3.<:将文件内容作为命令的输入。sort < unsorted_list.txt。
设计哲学:组合小程序,完成大任务。每个命令都像一个功能单一的零部件,通过管道和重定向将它们组装成强大的工具链。
复杂举例: 统计一个日志文件中出现次数最多的前5个IP地址。
bash
grep 'Failed password' /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -5
grep:从日志中过滤出包含"Failed password"的行(记录登录失败的尝试)。
awk:提取每一行的第11个字段(假设该字段是IP地址)。
sort:对提取出的IP地址进行排序,为下一步去重做准备。
uniq -c:统计并去重,显示每个唯一IP出现的次数。
sort -nr:按出现次数进行数字反向排序(从大到小)。
head -5:取排序后的前5行。
最终效果:一条命令就完成了从筛选、提取、统计到排序、展示的全过程。
三、 Shell脚本语法:自动化与编程
当需要将一系列命令和逻辑固化、重复执行时,就需要将其写入Shell脚本。它本质上是一个包含命令、控制流和变量的文本文件。
核心要素:
1.变量:存储数据。name="Linux",使用时用 $name 引用。
2.条件判断:使用 if-then-elif-else-fi 结构。
bash
if [ -f "/path/to/file" ]; then
echo "文件存在。"
else
echo "文件不存在。"
fi
3.循环:用于重复执行,如 for 循环。
bash
bash
for i in {1..5}; do
echo "这是第 $i 次循环"
done
4.函数:将代码块封装,便于复用。
bash
bash
greet() {
echo "Hello, $1!"
}
greet "World" # 调用函数,输出 Hello, World!
完整脚本举例:一个简单的备份脚本 backup.sh
bash
#!/bin/bash
# 定义变量
BACKUP_SRC="/home/user/data"
BACKUP_DST="/backup/data_$(date +%Y%m%d).tar.gz"
# 判断源目录是否存在
if [ -d "$BACKUP_SRC" ]; then
# 执行打包压缩备份
tar -czf $BACKUP_DST $BACKUP_SRC
# 判断上一条命令是否成功
if [ $? -eq 0 ]; then
echo "[$(date)] 备份成功:$BACKUP_DST"
else
echo "[$(date)] 备份失败!" >&2 # 错误信息输出到标准错误
fi
else
echo "源目录 $BACKUP_SRC 不存在!" >&2
fi
设计初衷:通过自动化将日常管理和复杂操作固化,提升效率和可靠性。

摸摸哒么么叽么么哒!follow me不迷路铁子!!!!