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解释器来跑这个脚本。我见过有人漏掉这一行,结果脚本直接报错,找半天原因。嗯,这个坑我年轻时也踩过。

怎么执行脚本?

两种方式,记住就行了。

  1. 直接执行:先给执行权限 chmod +x check.sh,然后 ./check.sh。路径不能省,否则系统去PATH里找,找不到就报“命令未找到”。
  2. 解释器执行: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脚本 Shell概述 Shell种类 第一个脚本 bash sh zsh 编写 → 保存 chmod +x ./执行 首要原则:脚本用bash,开头加shebang 避坑:Windows换行符导致脚本报错 调试用 bash -x
一句话总结: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写脚本。