Bash 基础

警告
本文最后更新于 2023-10-22,文中内容可能已过时。

Bash 基础

对 Bash 的简单认识

shell 只定义了一个非常简单的编程语言,所以,如果你的脚本程序复杂度较高,或者要操作的数据结构比较复杂,那么还是应该使用 Python、Perl 这样的脚本语言,或者是你本来就已经很擅长的高级语言。因为 sh 和 Bash 在这方面很弱,比如说:

  • 它的函数只能返回字串,无法返回数组
  • 它不支持面向对象,你无法实现一些优雅的设计模式
  • 它是解释型的,一边解释一边执行,连 PHP 那种预编译都不是,如果你的脚本包含错误 (例如调用了不存在的函数),只要没执行到这一行,就不会报错

总的来说,感觉 shell 脚本很简单也很原始,学习来不难,上手很快。

脚本语言天生适合拿来做面向过程的工作,Python 对面向对象和函数式编程的支持页都是后来加的,一开始也是不支持的

Java 作为严格的遵循面相对象的语言,限制比脚本语言多很多,但是同时,严格的的编程泛式也保证了代码的质量

查看当前系统中 Bash 的信息

下面的命令可以查看当前设备的默认 Shell。

1
2
$ echo $SHELL
/bin/bash

当前正在使用的 Shell 不一定是默认 Shell,一般来说,ps命令结果的倒数第二行是当前 Shell。

1
2
3
4
$ ps
  PID TTY          TIME CMD
 4467 pts/0    00:00:00 bash
 5379 pts/0    00:00:00 ps

上面示例中,ps命令结果的倒数第二行显示,运行的命令(cmd)是bash,表明当前正在使用的 Shell 是 Bash。

下面的命令可以查看当前的 Linux 系统安装的所有 Shell。

1
$ cat /etc/shells

上面三个命令中,$是命令行环境的提示符,用户只需要输入提示符后面的内容。

Linux 允许每个用户使用不同的 Shell,用户的默认 Shell 一般都是 Bash,或者与 Bash 兼容。

用户可以通过bash命令的--version参数或者环境变量$BASH_VERSION,查看本机的 Bash 版本。

在安装了 Python 之后,也是通过python --version来查看安装的 Python 的版本

1
2
3
4
5
6
7
$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

终端 Terminal

如果是不带有图形环境的 Linux 系统(比如专用于服务器的系统),启动后就直接是命令行环境。

不过,现在大部分的 Linux 发行版,尤其是针对普通用户的发行版,都是图形环境。用户登录系统后,自动进入图形环境,需要自己启动终端模拟器,才能进入命令行环境。

所谓“终端模拟器”(terminal emulator)就是一个模拟命令行窗口的程序,让用户在一个窗口中使用命令行环境,并且提供各种附加功能,比如调整颜色、字体大小、行距等等。有的终端自带了一些配色方案,可以让用户在使用 Base 的时候获得更好的视觉体验,用户也可以手动修改 Bash 的配色,具体请参考 Linux 修改 Shell 命令提示符及颜色_linux shell 高亮 颜色 时间_-纸短情长的博客-CSDN 博客

不同 Linux 发行版(准确地说是不同的桌面环境)带有的终端程序是不一样的,比如 KDE 桌面环境的终端程序是 konsole,Gnome 桌面环境的终端程序是 gnome-terminal,用户也可以安装第三方的终端程序。所有终端程序,尽管名字不同,基本功能都是一样的,就是让用户可以进入命令行环境,使用 Shell。

进入命令行环境以后,用户会看到 Shell 的提示符。提示符往往是一串前缀,最后以一个美元符号$结尾,用户可以在这个符号后面输入各种命令。

1
[user@hostname]$

上面例子中,完整的提示符是[user@hostname] $,其中前缀是用户名(user)加上@,再加主机名(hostname)。比如,用户名是bill,主机名是home-machine,前缀就是bill@home-machine

注意,根用户(root)的提示符,不以美元符号($)结尾,而以井号(#)结尾,用来提醒用户,现在具有根权限,可以执行各种操作,务必小心,不要出现误操作。例如

1
[root@hostname]#

这个符号是可以自己定义的,详见《命令提示符》一章。

为了简洁,后文的命令行提示符都只使用$表示。

进入和退出

进入命令行环境以后,一般就已经打开 Bash 了。如果你的 Shell 不是 Bash,可以输入bash命令启动 Bash。

1
$ bash

退出 Bash 环境,可以使用exit命令,也可以同时按下Ctrl + d

1
$ exit

之后,我们会学习其他的脚本工具,比如 Python,我们会发现,我们是通过输入python命令进入 Python 的 shell 环境,输入exit退出 Python 的 shell 环境,这些方式跟 Bash 是一样的。其他的脚本接其实应该也是这种方式

0%