1. Shell脚本入门:Shell概述、Shell种类、第一个Shell脚本编写与执行
说实话,很多人把Shell脚本当成"系统管理员的小工具"。但我干了这么多年运维,它早就是我的救命稻草了。我们做审计日志巡检,天天要处理成百上千个日志文件,没有脚本寸步难行。这一章咱们先把地基打牢。
Shell到底是什么?
Shell就是一个命令解释器。你敲一条指令,它翻译给内核,内核去干活。反过来,内核的输出也通过Shell反馈给你。说白了,Shell是用户和操作系统之间的“翻译官”。
我在项目里见过不少新手,分不清终端和Shell的区别。终端是你眼前的黑窗口,Shell是里面跑的那个程序。嗯,这个得记牢。
Shell有哪些种类?
市面上Shell种类不少,但咱们做审计日志巡检,重点关注这几个。
| Shell | 特点 | 常见场景 | 我的备注 |
|---|---|---|---|
| sh (Bourne Shell) | 最早的标准Unix Shell,功能精简 | 系统初始化脚本、POSIX兼容性要求 | 能用,但我基本不用——灵活性不够 |
| bash (Bourne Again Shell) | sh的增强版,支持命令补全、数组、算术运算 | Linux默认Shell,90%的脚本用这个写 | 我个人习惯用bash,审计巡检脚本的首选 |
| ksh (Korn Shell) | 兼具sh的兼容性和C Shell的交互特性 | 老牌Unix系统、银行/金融场景 | 曾经维护过一台AIX机器,ksh是标配 |
| zsh (Z Shell) | 兼容bash+ksh,插件丰富 | macOS默认Shell、开发者个人终端 | 交互很爽,但写脚本我依然选bash——生态硬 |
| csh/tcsh | 语法类似C语言,交互式友好 | 部分BSD系统、老用户习惯 | 避坑:csh的脚本写起来容易踩坑,别用它写审计脚本 |
你想想看,要是脚本换个Shell就跑不动了,那得多坑。所以咱们的审计日志巡检脚本统一用bash,兼容性最好。
第一个Shell脚本:Hello 审计日志
光说不练假把式。来,写一个最简单的脚本。打开终端,用你喜欢的编辑器(vi/vim/nano都行),新建一个文件叫 check.sh。
#!/bin/bash
# 我的第一个脚本:审计日志巡检预备
echo "Hello, 审计日志巡检!"
这里有个细节——第一行 #!/bin/bash 叫shebang。它告诉系统:用bash解释器来跑这个脚本。我见过有人漏掉这一行,结果脚本直接报错,找半天原因。嗯,这个坑我年轻时也踩过。
怎么执行脚本?
两种方式,记住就行了。
- 直接执行:先给执行权限
chmod +x check.sh,然后./check.sh。路径不能省,否则系统去PATH里找,找不到就报“命令未找到”。 - 解释器执行:
bash check.sh,不需要权限,也不需要shebang。调试的时候我最爱用这招,就算脚本没有x权限也能跑。
我的小习惯:写新脚本时,先用
bash -x script.sh 调试一次,能看到每一步执行了什么。审计日志巡检的脚本尤其要加 -x 验证,逻辑对错一目了然。
注意:Windows 编辑器(如记事本)在保存文件时会加回车符
\r\n,而 Linux 只认 \n。我曾经把一个审计脚本从 Windows 上传到服务器,一跑就报 $'\r': command not found。解决办法:用 dos2unix 转换一下,或者直接用 Linux 里的 vim 写脚本。
知识体系总览
下面这张图把本章核心串起来了。你看一眼,脑子里的结构就清晰了。
一句话总结:Shell脚本就是把一堆Shell命令塞进文件,加上shebang,给权限,跑起来。咱们的审计日志巡检脚本,其实就是把这个过程放大——从一条命令到一个复杂的日志分析流程。
避坑指南(我的血泪史)
- Shebang写错路径:有一次我把
#!/bin/bash写成了#!/bin/bas h,多了一个空格,脚本直接崩溃。查了半小时才发现,真冤。 - 忘记给执行权限:刚学脚本时我总忘了
chmod +x,然后傻傻地./script.sh,系统回我“Permission denied”。嗯,后来我用bash script.sh绕过去了。 - 脚本带BOM头:Windows记事本保存的UTF-8文件会在开头加三个不可见字节(BOM)。这玩意在Linux下会让shebang失效。解决方法:用
sed -i '1s/^\xEF\xBB\xBF//' your_script.sh,或者改用VS Code、Vim写脚本。