什么是shell
看语境,有时候Shell指连接内核和用户的一个应用程序,有时候指一种脚本编程语言。不过这个看语境对于一个小白来说其实还挺难的,大部分情况下说shell其实说的是应用程序,但如果是说shell命令,脚本文件那shell就是指一种编程语言。
macOS 系统的默认终端(shell应用程序)是 Terminal,默认使用的shell是zsh(这里的zsh就是指脚本编程语言)。iTerm2 也是一款终端软件。iTerm2只是比Terminal拥有更多的自定义设置,使用oh-my-zsh美化后都差不多。终端这个shell应用程序可以设置具体使用哪一种shell作为默认shell。使用哪种shell作为默认shell的终端就称为xxx终端,比如zsh终端,bash终端。
Shell 可以指一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。
Shell 也可以指一种脚本编程语言。Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器(解释器一般就是shell终端软件也就是Terminal或者iTerm2等等)就可以了。
Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。
有哪些shell
shell是一个总称,具体shell有:bash、csh、ksh、zsh等等。Mac默认使用的是zsh。
查看安装了哪些shell:
1 | cat /etc/shells |
打印:
1 | # List of acceptable shells for chpass(1). |
这里的shell指shell编程语言。不同的shell拥有不同的语法和内置命令,但大差不差,有的可以兼容另一种。一个编写好的shell脚本需要使用shell终端来解释执行。因为有的可以兼容另一种,所以一个使用A shell编写的脚本文件可以不加修改的在使用B shell作为默认shell的终端里解释执行。
查看正在使用的是哪种shell
1 | echo $SHELL |
打印:
1 | /bin/zsh |
如何执行一个shell脚本
两者都要先打开终端,在终端里运行。
方式1.给shell脚本添加可执行权限。 这个是常用的做法。
1 | 1.cd 到相应目录 |
方式2.作为解释器参数。这种运行方式是直接运行解释器,其参数就是 shell 脚本的文件名。如:
1 | /bin/zsh test.sh |
如何切换shell
chsh -s /bin/某shell,如:
1 | chsh -s /bin/zsh #切换到zsh |
最后重启终端。
zsh与oh-my-zsh的关系
zsh既可以指终端软件又可以指zsh脚本语言,但在这个问题里,zsh指的是终端软件。而oh-my-zsh是一个为了方便配置zsh终端的库。使用oh-my-zsh可以美化zsh终端(美化后的zsh终端看起来要比原始zsh终端要好看很多,不管是字体,颜色等等),增强zsh终端的功能(相比原始zsh终端可以命令高亮,命令补全等等)。当然你也可以使用powerline美化bash终端。
环境变量
bash 的环境变量保存在.bash_profile
文件。
zsh 的环境变量保存在.zshrc
文件。
TODO环境变量是什么?
TODO为什么需要环境变量?
方便使用。