简介
- 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
- Shell 是一个用
C 语言编写
的程序,通过 Shell 用户可以访问操作系统内核服务
。 - Shell 既是一种
命令语言
,又是一种程序设计语言
。 -
- Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。
- Shell 编程跟 java、php 编程一样,只要有一个能
编写代码
的文本编辑器
和一个能解释执行
的脚本解释器
就可以了。 - Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell解释器,可以通过 cat /etc/shells 命令查看系统中安装的 shell解释器。
cat /etc/shells
- Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell解释器。
shell 解释器
java 需要 虚拟机解释器, 同理 shell脚本也需要 解析器
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
交互式shell和非交互式shell(interactive shell and non-interactive shell)
-
交互式模式就是在终端上执行,
shell等待你的输入,并且立即执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。 -
非交互式模式,以shell script(非交互)方式执行。在这种模式 下,
shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
当它读到文件的结尾EOF,shell也就终止了。 -
可以通过打印“$-”变量的值(代表着当前shell的选项标志),查看其中的“i”选项(表示interactive shell)来区分交互式与非交互式shell。
-
交互式shell
[deng@localhost ~]$ echo $-
himBH
- 非交互式shell
deng@localhost ~]$ cat test.sh
echo $-
[deng@localhost ~]$ ./test.sh
hB
[deng@localhost ~]$
登录shell和非登录shell
- 登录shell:是
需要用户名、密码登录后才能进入的shell
(或者通过”–login”选项生成的shell)。 - 非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:
直接命令“bash”就是打开一个新的非登录shell,
在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。 - 执行exit命令,退出一个shell(登录或非登录shell);执行logout命令,退出登录shell(不能退出非登录shell)。
//登录shell
[deng@localhost ~]$ bash --login
[deng@localhost ~]$ logout
//登录shell
[deng@localhost ~]$ bash --login
[deng@localhost ~]$ exit
登出
//非登录shell
[deng@localhost ~]$ bash
[deng@localhost ~]$ logout
bash: logout: 不是登录shell: 使用 `exit'
[deng@localhost ~]$ exit
exit
[deng@localhost ~]$
bash
- 对于Bash来说,登录shell(包括交互式登录shell和使用“–login”选项的非交互shell),它会首先读取和执行/etc/profile全局配置文件中的命令,然后依次查找/.bash_profile、/.bash_login 和 ~/.profile这三个配置文件,读取和执行这三个中的第一个存在且可读的文件中命令。除非被“–noprofile”选项禁止了。在非登录shell里,只读取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )文件,不同的发行版里面可能有所不同,如RHEL7.5中非登录shell仅执行了“~/.bashrc”文件(没有执行/etc/bashrc),而Ubuntu16.04中却依次执行了/etc/bash.bashrc 和 ~/.bashrc 文件。
- 对于这些规则,可以直接在相应的配置文件中加一些echo命令来验证其真实性。
- 这个涉及到我之前的一个错误解决https://blog.csdn.net/qq_46893497/article/details/110947074
关于shell详细可以参考https://www.cnblogs.com/szitcast/p/11156054.html