Linux Shell学习(一)

1.什么是Linux shell?

Linux内核启动的最后阶段会创建init进程,init进程的主要工作如下:
<1>读取系统初始化表格文件/etc/inittab.
<2>建立getty进程,在终端上显示login提示符,以等待用户的登录.
<3>进程getty会调用exec以执行login程序.该程序将会核对用户账号和密码.
<4>login程序会调用exec以执行shell命令解释器,也可执行X-windows.
<5>shell命令解释器会读取系统环境配置脚本/etc/profile.
在这个过程中就会执行Shell,Shell是系统用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。同时,Shell也是一门编程语言。属于解释型的语言。我们所说的Linux Shell通常指的是Linux系统中自带的Shell解析器。而Linux Shell编程多指使用Shell语言进行程序设计。

2.Linux系统中支持哪些Shell解析器
同Linux本身一样,Shell也有多种不同的版本。主要有下列版本的Shell: 
Bourne Shell:是贝尔实验室开发的。
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。
Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。
C Shell:是SUN公司Shell的BSD版本。
Z Shell:The last shell you’ll ever need! Z是最后一个字母,也就是终极Shell。它集成了bash、ksh的重要特性,同时又增加了自己独有的特性。
2.1查看所用的Linux版本中所支持的shell
# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
2.2查看当前用户所使用的Shell?
# echo $SHELL
/bin/bash
2.3如何进行Shell切换?
# chsh -l 将列出所有可切换的shell
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
# chsh  进行shell切换
Changing shell for root
New shell [/bin/zsh]: /bin/bash 输入目的Shell
Shell changed
#

3.何谓登录Shell,非登录Shell?
登录shell 是通过输入用户名密码登录得到的shell。如ssh或telnet登录进入的shell。非登陆shell如在图形系统下打开控制台。或直接在命令行里输入/bin/csh 之类切换得到shell。属于非登录shell。如果在命令行里输入 /bin/bash --login. 那么这时候得到的就是登录shell。
两者差别是,登录shell会加载一些文件。首先执行/etc/profile,然后执行以~/.bash_开头的文件,其次~/.profile。退出时候执行~/.bash_logout脚本(如果存在)。一般系统为了保证~/.bashrc都会被执行,~/.bash_profile中调用~/.bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
如此一来。~/.bashrc反而变成保证一致性,变得非常通用而且很重要的初始化地方。另外由于~代表各个用户自己,所以为了避免给每个用户修改~/.bashrc 文件。由此产生了一个全局所有用户的文件/etc/bashrc。 在每个用户 ~/.bashrc 文件有这样一句话
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
这样就方便了,更改一个文件内容,对登录还是分登录shell,所有用户都能生效。

4.何谓交互Shell,非交互Shell?
非交互Shell是指为执行脚本而fork出来的子Shell。说简单点。就是script脚本里面shell命令是在非交互shell下执行。因为解析这些命令时候。会启动一个/bin/bash 之类解析器去执行。交互Shell会带‘-‘。简单来说,命令行的Shell都是交互Shell,它需要与用户交互,等待用户输入命令再解析。可以使用以下方法来查看。
# echo $$
28200
# ps -ef | grep 28200
root    28200    28189 0 09:44 pts/1 00:00:00-bash
由此看来现在我所使用的便是交互Shell了。

了解一些Shell的基本知识就开始学习Shell脚本编程了。



Linux Shell学习(一),布布扣,bubuko.com

Linux Shell学习(一)

上一篇:linux内核分析--中断的分类


下一篇:Hibernate中两种获取Session的方式