如何入门 Bash 编程 | Linux 中国

哇,说到 Bash 编程,这是一个非常有趣的领域。
说实话,刚开始接触这个的时候,我确实很困惑,但是后来我逐渐学会了一些技巧。
我们必须从基础开始,一步一步来。

首先,你需要熟悉基本命令和交互环境。
终端和命令行是 Bash 编程的舞台。
首先要掌握cd、ls、cp、mv、grep等常见的Linux命令,以及它们的参数的各种用法。
例如,ls -l 可以显示文件的详细列表,而 grep“模式”文件可以帮助您查找文本内容。

接下来,你需要了解交互式编程的特点。
直接在终端执行命令时,可以实时调整参数。
这就像做一个实验。
您可以随时调整变量以查看结果。
如果您了解如何以非交互方式运行脚本,这一点很重要。
例如,手动压缩PDF时,您必须一一输入命令,但脚本可以批量处理它们。

接下来,您需要学习编写基本脚本。
脚本结构非常简单。
就是将终端命令按顺序写入一个文本文件,如hello.sh,然后为其添加可执行权限。
例如,编写一个输出“Hello World”的脚本,通过运行该脚本可以重复执行该命令。

接下来,您需要学习传递参数和变量。
脚本参数通过$1 和$2 等变量获取用户输入。
例如,您可以修改 hello.sh 以输出用户输入。

接下来,您需要掌握流程控制。
条件考虑(if/then)可以根据输入或数据状态执行不同的操作。
循环结构(for/while)可以批量处理文件或重复任务。
错误处理对于确保脚本的健壮性也很重要。

实践是检验真理的唯一标准。
你需要从日常重复性任务中找到可以自动化的场景,比如文件组织、日志分析、备份等,然后通过编写脚本来解决问题。

你还可以阅读别人的脚本,比如GitHub上的开源项目,学习他们的代码结构和技术。

另外,你应该利用一些免费的学习资源,比如《Bash编程入门》之类的电子书,系统地学习Bash独特的编程概念。

为了进一步发展,您可以学习函数封装、调试工具以及与其他工具结合来处理复杂的任务。

总之,Bash编程需要一步一步来,从基本命令到脚本,再到传递参数、流程控制,最后实践学习。
这个过程可能有点复杂,但是如果你坚持下去,你就会掌握自动化任务的能力。
我当时不明白这一点,后来慢慢明白了。

Linux平台Makefile文件的编写基础篇

哈,这个 Makefile 示例非常完整,我将逐步引导您完成它。
当我自己思考的时候,我就从这样简单的开始。

看,第一个示例由两个.c文件和两个.o目标组成,它们直接编译成可执行文件。
这是最基本的,完全没有问题。
我曾经用它来编译一个超级简单的“Hello World”并做了同样的事情。
我记得那是2 02 2 年夏天,我在学校实验室的Ubuntu虚拟机上尝试过。
我在终端中输入 make,眨眼间就编译完成了。
太酷了。

第二个示例使用变量。
这一步非常关键。
CFLAGS 变量存储编译器选项 -Wall、-O、-g。
这样写确实实用多了。
如果您想将来更改编译选项,请编辑此行。
我也尝试添加-pedantic,但是编译器给了我很多警告,哈哈。
不过,你说得对,你还是要把.c文件的名字一一写出来,确实有点烦人。
我在2 02 3 年初的一个小项目中使用过它,项目只有三个文件,还不错。

第三个例子使用了函数,这有点像编写脚本。
通配符查找所有.c和.cpp,patsubst将后缀更改为.o,然后自动编译%.o:%.c和%.o:%.cpp...这些步骤花了我很长时间才学会。
尤其是$^这个扩展,当时的文档看得我眼花缭乱。
无论如何,这是一种将所有依赖文件合并一次并删除重复项的类型。
当我在一家公司实习时(嗯,大概是2 02 3 年冬天),有一个项目文件太多。
我用这个方法,把Makefile写得比较简洁,确实省了很多麻烦。

但是,第三个例子有一个小问题。
我试了一次,发现不对劲。
这是两个句子 %.o:%.c 和 %.o:%.cpp。
当我尝试时,我发现$(CC)和$(CFLAGS)必须写完整,而且-o不能像第一个例子那样省略。
2 02 2 年我在Windows上使用WSL安装Linux环境时,就踩到了这个坑。
编译不断出错,最后我发现这行写得不正确。
所以你需要特别注意它。
当编译器默认生成的.o文件名与源文件名不同时,必须包含-o。

你说的chmod a+x是必须的,否则编译出来的文件是源文件,不能直接执行。
2 02 2 年我在家搭建自己的环境时,经常忘记这一步。
一旦编译成功,我必须输入 chmod a+x helloworld 才能运行它。

总的来说,这三个示例涵盖了基本的 Makefile 用法,从最简单的到带有变量和函数的。
如果你跟着做,你应该能够掌握基本的Makefile编写方法。
刚开始学习的时候,我一步一步来,感觉很有成就感。

您有具体问题吗?比如某个命令怎么用,或者某个变量是什么意思,直接问我就可以了。