不过时的技术——Bash脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不过时的技术——Bash脚本相关的知识,希望对你有一定的参考价值。
参考技术ABash是一种不需要编译,直接运行在Unix/Linux系统之上的脚本程序。它可以只包含一些简单的命令,顺序执行;也可以包含变量、控制语句等复杂的语法结构。Unix/Linux系统一直就是计算机世界的基石,Bash也是系统管理员、程序员必须掌握的技术之一,很多工作都可以借助Bash自动执行。甚至Unix/Linux系统本身的很多功能,也是由Bash实现的。随意打开 /etc/init.d/ 目录下的某个文件,会发现就是一个Bash脚本,在Linux中,存在这大量这样的脚本。
上面的脚本看似复杂,但从结构上可以简单划分为四部分:
1. 第一行 #! /bin/sh 叫 shebang ,标明这是一个Shell脚本。
2. 后面以 # 打头的是注释,说明该脚本的作用及用法。
3. 中间一大段是命令及控制语句,这里是真正做事的地方。
4. 最后 exit 0 ,退出脚本。
一个Linux命令执行后,都会有一个返回值, 0 表示命令执行成功, 1 表示命令执行过程中出错,根据错误的不同,还可能返回 2 、 3 、 4 等值。在Linux中,变量 $? 记录了上次命令的返回值。使用 echo $? 可以查看上次命令执行成功与否。Bash脚本的返回值默认为最后一条命令的返回值,很多时候这并不是我们想要的结果,因此常常在脚本最后使用 exit 0 显式声明返回值。
遵循上面的规则,我们可以编写出自己的第一个Bash脚本: hello_world ,它的作用是在命令行打印一条消息。
切换到该脚本所在目录, bash hello_world 运行该脚本,不出意外的话,恭喜你写出了第一个Bash脚本。
通常人们不采用 bash hello_world 这种方式运行Bash脚本,而是赋给脚本可执行权限,直接运行脚本:
有些同学会在运行脚本时碰到一个问题:既然已经在当前目录下,为什么直接运行 hello_world 会报命令找不到的错误?这是因为 当前目录并不包含在$PATH 路径下。Linux执行一个程序时,总是在系统环境变量$PATH里找对应的可执行程序,如果找不到,就会报命令找不到的错误。我们可以打印出$PATH变量 echo $PATH ,显然,当前路径并没有包含在里面。
为了方便,系统管理员通常把Bash脚本保存在 /usr/local/bin 和 $USER/bin 目录下,因为这些目录默认包含在系统环境变量$PATH里。我喜欢在当前用户目录下新建一个 bin 目录,然后将该目录加入$PATH,就可以直接在这里编写Bash脚本了。
编写Bash脚本时手一滑,可能会将脚本命名为 test ,此时执行脚本会得到意想不到的结果:
使用 which 和 type 命令检查后发现,事实上执行了一条内置的Linux命令。此时就需要明确指定路径来执行该脚本了: ./test 。最好是能在命名时注意冲突,随着对Linux的熟悉,这种情况会慢慢好起来的。
最后为大家布置一道练习题:编写一个Bash脚本,在当前目录下生成一个日志文件,随意输入一些内容,备份该文件,并将原始日志文件内容清空。如果对Linux命令不熟悉,可能要查阅一些资料:如何输出一些文本到文件、如何清空文件内容等。
读者若对Bash脚本感兴趣,可阅读 Advanced Bash-Scripting Guide 深入学习,祝大家学习快乐!
以上是关于不过时的技术——Bash脚本的主要内容,如果未能解决你的问题,请参考以下文章