第四章 Shell的使用 知识点
Edit by LCHSH
1. 什么是Shell?
Shell是一个系统程序,在前台提供Linux系统与用户交互操作的界面;另外一方面Shell是一个命令的编译解释器,会将用户命令经过编译和解释后,交给内核进行执行,也就是说将用户命令解释为系统和内核可以理解和识别的机器语言。
    我们目前所使用的操作系统实际上是一个核心(内核Kernel)。作为使用者无法直接对内核(Kernel)进行操纵,而是通过内核的“外壳程序”来与内核进行沟通,这个外壳程序因此得名,实际上就是Shell。
    Shell是使用者与系统的一个互动界面,主要是要使用者通过命令行来完成工作,所以Shell的定义就是命令的编辑解释器:将使用者的命令翻译给核心;将核心处理结果翻译给使用者。
    当用户登录的时候,就获得了一个Shell。
    Shell和内核实际上是不同的两套软件:不同的操作系统上可以使用不同的Kernel,而相同的操作系统上也可以使用不同的Shell。
2. Shell有哪些种类?
  ① Bsh:是Bourne Shell的简称,是较早的UNIX Shell程序,实现了基本的Shell程序功能,除了承担命令解释器的功能外,Bsh还是编程语言。
  ② Csh:是C Shell的缩写,使用C语言的语法风格。Csh与Bsh相比,更加适合于用户命令交互。
  ③ Ksh:结合了Bsh和Csh两者的功能优势,兼有Bsh的语法和Csh的交互特性。
  ④ Bash:是Bsh的升级替代品。是GNU项目的成员,也是著名的开源软件项目。大多数Linux发行版本都使用Bash作为默认的Shell,当运行Shell程序时,系统实际运行的是Bash程序。
3. 各种Shell之间如何切换?
系统启动后,默认运行的是Bash。
#bsh(运行Bsh,此时的Bsh是Bash的子shell)
#exit(退回到Bash)
#csh(运行Csh,此时的Csh是Bash的子shell)
#exit(退回到Bash)
4. 如何更改用户帐户的Shell?
  使用chsh命令可以更改帐户的Shell。
#useradd teacher(创建用户帐户teacher)
#passwd teacher(为teacher帐户设置密码)
#grep teacher /etc/passwd(列出passwd文件中所有包含有字符串“teacher”的行)
  teacher:x:500:500:teacher:/home/teacher:/bin/bash(可以看到,teacher帐户用的是Bash)
  #chsh teacher(更改帐户teacher的shell,可以键入/bin/bsh把teacher的Shell改为Bsh)
  新的Shell并不马上生效,将在用户下一次登录系统时生效。
5. 什么是变量?变量的作用是什么?
所谓的变量,就是利用一个特定的“名称”(变量名)来存储可以变化的“值”。
变量的作用在于存储环境参数和保存Shell的信息。变量里的值可以在与用户的交互操作中被用户读取使用。
6. Shell变量可以分为哪些类型?
  可以分为:环境变量、预定义变量、位置变量、自定义变量(本地变量)四种类型。
7. 什么是环境变量?
环境变量是用户登录时Linux系统为用户预先设定好的一类Shell变量。其功能是设置用户在当前Shell中的工作环境,包括用户宿主目录、命令查路径、用户当前目录等。
环境变量具有如下特点:
  ① 环境变量的名称不使用小写字母。
② 环境变量在Linux系统中拥有固定的含义,因此环境变量的名称是固定的。
③ 环境变量的初使值在用户登录后就已经存在,并可以被其他命令读取和使用。
  ④ 环境变量的值通常由Linux系统自动维护,无需用户人工设置。
  ⑤ 环境变量中的值会随着用户状态的改变而改变,用户可以通过读取环境变量了解自己的当前状态。
8. 如何查看系统中都有哪些Shell变量?
  set命令用于显示系统中的所有的各类型的Shell变量,但其中大多数是环境变量。
    #set | more(分屏显示当前用户全部Shell变量的名称和变量的值)
9. 如何查看某一个具体的变量的值?
  使用echo命令,此命令的参数为变量名前面加上“$”符号,这样就可以查看到变量中存储的值。
  #echo $PATH(查看环境变量PATH中的值)
10. 常用的环境变量有哪些?
  ① USER:存储的是当前帐户的帐户名。
  ② UID:存储的是当前用户帐户的用户号。
  ③ SHELL:存储的是当前用户登录时所使用的Shell。
  ④ HOME:存储的是当前用户的宿主目录。
  ⑤ PWD:存储的是用户当前所在的目录。
  ⑥ PATH:存储的是当前用户的命令搜索路径,即用户输入命令而不指定命令文件的路径时,Shell程序将在哪些目录中进行该命令程序的搜索。
  ⑦ PS1:主提示符,在特权用户下,缺省的主提示符是#;在普通用户下,缺省的主提示符是$。
  ⑧ PS2:在Shell接收用户输入命令的过程中,如果用户在输入行末尾输入\,然后回车,或者当用户按回车继续输入命令的其余部分,缺省的辅助提示符是>。
11. 用户的环境变量是如何设置的?
Shell的大部分环境变量是在用户登录启动shell之后就存在并且有了初值了,那么,这些变量及其初值是如何设置出来的呢?系统是通过一系列的环境变量配置文件设置这些环境变量的。作为root用户可以修改这些文件从而对用户的环境变量进行定制。
  环境变量配置文件可分为全局配置文件和用户配置文件两种。
  环境变量全局配置文件包括“/etc/profile”和“/etc/bashrc”两个文件,Linux系统中所有的用
户在登录时都会按照全局配置文件的内容设置工作环境。“/etc/profile”文件负责设置全局的环境,适用于所有的用户的登录;“/etc/bashrc”文件用于定义全局的函数和别名。
在执行完上述配置文件之后,bash会执行登录用户宿主目录下的“.bash_profile”文件和“.bashrc”文件。通过这两个配置文件设置用户个性化的环境变量。在这里的设置可以覆盖上述两个配置文件的设置。这两个文件的作用分别类似于全局的“/etc/bashrc”文件和“/etc/bashrc”文件。
12. 什么是位置变量?
在Shell程序执行过程当中,shell可以通过位置变量来获得用户在命令行上附加的参数。位置变量共有九个,从$1到$9,分别标识了用户输入的整个命令行中以空格分隔开的字符串,$1表示第一个参数,$2表示第二个参数,依此类推。
  $0代表所执行命令的名称,虽然$0与位置变量的格式相同,但是$0属于预定义变量而不是位置变量。
13. 什么是预定义变量?
预定义变量是Shell内部已经定义好的变量,其值是由Shell根据系统环境的变化自动赋值,不能进行手工更改。所有预定义变量都是由$符号加上另外一个符号组成,用户通过他们可以获得当前脚本程序的运行信息,常用的预定义变量有:
    $#  表示位置参数的数量。
    $*  表示所有位置参数的内容。
    $?  表示命令执行后返回的状态,返回0表示成功执行,其他表示错误执行。
linux重定向    $$  表示当前进程的进程号。
    $!  表示后台运行的最后一个进程号。
    $0  表示当前执行的进程名称。
  预定义变量通常使用在Shell脚本中,在Shell交互命令中并不常使用,但是仍然可以使用“echo”命令查看预定义变量的值。
  #echo $$(查看当前进程的进程号)
14. 什么是用户自定义变量?
用户自定义变量是Shell用户自己定义的变量,只在用户自己的Shell中有效,因此又称为本地变量。自定义变量能够实现更加灵活的功能,因此自定义变量也是用户最常使用的一类变量。
① 自定义变量的设置
  #DAY=sunday(给自定义变量DAY赋值为sunday)
  自定义变量的查看
  #echo $DAY(查看自定义变量DAY的值)
  ③ 自定义变量的输出
  用户在自己的Shell中定义了某个变量后,只能在当前的Shell中使用这个变量,而在当前Shell的子Shell中是无效的。可以用export命令把用户自定义变量输出为全局变量,就可以在子Shell中引用这个变量了。
  #export DAY(将自定义变量DAY声明为全局变量)
  ④ 自定义变量的清除
  #unset DAY(清除自定义变量DAY)
15. Bash有哪些常用功能?
  ① 命令的补全功能:当用户输入某条命令时,可以只输入命令名中开始部分的字符,然后使用Tab键进行命令的补全。
  ② 目录名、文件名的补全功能:利用Tab键,在已经输入的路径中,对文件和目录名进行匹配查,从而补全。
③ 命令功能功能:该功能可以让用户快速地重复地执行已经输入过的命令。
#history(显示Bash中保存的所有历史命令,在本命令的执行结果中,每个用过的历史命令占1行记录,前面标有行号)
  #!22(执行历史命令中的第22条命令)
  #!his(执行历史命令中前三个字符是“his”的那条命令)
  #history –c(清空历史命令)
  为了提高系统的安全性,可以将“history -c”命令添加到“.bash_logout”文件(此文件是用户注销时执行的脚本)中,这样每次用户退出Shell时都会自动将用户的历史命令列表清空。
  ④ 别名功能:该功能可以把频繁使用的复杂命令定义为简单的别名命令,简化了命令的输入。
#alias benet=’mount –t iso9660 /dev/cdrom /media/cdrom/’(定义别名命令“benet”)
#alias benet(查看别名命令“benet”的内容)
  #benet(执行别名命令,进行光盘的挂载)
  当自定义的别名命令与系统中的命令重名时,该命令执行时,系统调用执行的是别名命令。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。