«

入门 bash 脚本的编写

时间:2026-4-16 00:53     作者:独元殇     分类: 开发相关


欢迎关注我的公众号,名叫「串串狗小刊」

现在 AI 时代,bash 这种 AI agent 非常依赖的技术,我们是必须要学学的。

以前我们程序员并不重视这个,因为我们用到的时候略少一点,一般是运维、系统管理、服务器开发需要精通它,但是现在 AI 基本上就靠 bash 来作为中间人为我们做事,我们每个人必须得知己知彼,一方面大概心里有点数,知道 bash 的本事的边界在哪里,另一方面我们可以看出 AI 输出的命令行有哪些不对的,或者保存起来,或者做出一些改正。

它是什么?

首先需要明确一个概念,shell 是解析我们命令、指令脚本的程序。运行在终端(已经被淘汰)、终端模拟器上。我们在终端(命令提示符)输入的指令,就是 shell 指令,什么 cd mkdir ls pwd rm ... 这种。

而 shell 指令,有很多版本。

在 linux/unix 这边,从古老到现在,依次是 sh、bash、zsh、fish 等等。一般我们就学 bash 就 OK 了。zsh 是扩展版本。

而 windows 那边,比尔盖茨一直玩的是 dos ,是 cmd、PowerShell 。

(当然,在 windows 上,也有 bash.exe 来解释我们的 bash 指令,这个一般会和 git 捆绑安装,你个编程序的程序员,不可能不用 git 吧?! 因此 windows 上的 agent,比如 龙虾机器人、claude code 是使用的 git 内置的这个 bash.exe 来完成解析 bash 的指令,比如 ls rm cat ....)

我们的 ai 和我们电脑交互,目前还是使用的 bash 这个 cli 解释指令器。毕竟经过了几十年的考验,丝滑顺利。

入门

它虽然很简单,但依然是一门指令语言。还是有很多内容的,完整且友好的教程,目前有阮一峰的 bash 教程:

https://wangdoc.com/bash/

今天简单入个门。

首先,常用的 cli 命令,也就是 shell 命令,我就不多说了,这边是 bash 的命令,默认大家知道 cd mkdir ls pwd rm ... 都是什么。如果不知道,需要自己靠墙去反思。

如何进入?一般我们打开终端,就是 bash ,但是我们也可以敲 bash 进入纯 bash,虽然我们不这么用。

img

就是直接在 bash 里面敲 bash ,就可以进入 bash 环境,我们可以看到版本,但... 等于脱裤子放屁,没什么用。

比如上图我敲的三个命令,我就是进入了纯 bash ,pwd 的执行效果一模一样。

echo

最常用的 echo ,它后面跟什么,就会输出什么。当然,如果是多行的文本,那就写个双引号,等结束的时候,也输入双引号:

img

或者说,使用 -e 来解析 \n :

bash-3.2$ echo -e "第一行\n第二行\n第三行"
第一行
第二行
第三行

这个其实更实用。

分号 ;

这个是区分多个命令的,跟 JS 里的分号差不多,它会依次隔断,然后依次执行。比如我想让它 pwd 后,再 输出上面的东西:

bash-3.2$ pwd; echo -e "第一行\n第二行\n第三行"
/Users/kehongli
第一行
第二行
第三行

实用吧!AI agent 很喜欢这样!但注意,它可不管你命令有没有执行成功,它始终都会一个一个执行。

两个命令组合符

分号比较的强制,如果我们想让前面的命令执行成功后,再执行下一个,或者前者失败时,执行下一个。那就用到 && 和 || 了。

比如,我们建立一个文件 test.txt,然后输出成功建立:

bash-3.2$ touch test.txt && echo "成功新建 test.txt"
成功新建 test.txt

或者尝试修改 bbb.txt ,如果没有,就输出没找到:

bash-3.2$ cat bbb.txt || echo "没找到这个文件"
cat: bbb.txt: No such file or directory
没找到这个文件

现在你知道这俩命令的重要性了吧?

波浪线

这个 ~ 我们在 ai agent 里很常见,这个是当前用户目录。电脑给每个用户都建立了一个用户目录。这个不多说。

通配符

有 问号 ? 和 星号 * 。

一个问号,匹配一个未知字符,两个问号,匹配两个。

星号则是匹配任意多个。

比如列出当前目录所有的 aa 开头的四字符 txt 文件,或者所有 txt 文件。

bash-3.2$ ls aa??.txt
aaaa.txt    aawb.txt
bash-3.2$ ls *.txt
aaa.txt     aaaa.txt    aaabb.txt   aaabbsss.txt    aawb.txt    test.txt

就这样用。

变量

直接写等于就行,但是在 echo 的时候,无比加上 $ :

bash-3.2$ testValue="hello"
bash-3.2$ echo $testValue
hello

# 或者 let,这个能执行数学运算
bash-3.2$ let a=7+9
bash-3.2$ echo $a
16

注意,千万不要加空格,就紧紧写着。bash 里对空格的要求还是很严格的。

脚本

其他的可以慢慢学,但是脚本,这个一般是我们很需要去学的。因为我们很多时候想固定一堆命令,作为我们的自动化脚本,比如你创建一个 script.sh 文本文件,第一行需要这样写 :

#!/bin/bash
echo "这是一个脚本"

这个是告诉系统,使用 bash 解释器的。

之后要全系统用户授权:

# 给所有用户执行权限
$ chmod +x script.sh

注释使用井号 # 就 OK !

执行的时候,直接 ./script.sh 就可以了:

bash-3.2$ chmod +x my_script.sh
bash-3.2$ ./my_script.sh
这是一个脚本

更多的,大家去阅读教程吧。

标签: 原创 bash