shell的使用

来源:互联网 发布:白银理财实时数据 编辑:程序博客网 时间:2024/06/05 06:23

    Shell的使用的使用的使用的使用     

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/profile”文件和


“/etc/bashrc”文件。  12. 什么是位置变量? 在Shell程


序执行过程当中,shell可以通过位置变量来获得用户在命令


行上附加的参数。位置变量共有九个,从$1到$9,分别标识了


用户输入的整个命令行中以空格分隔开的字符串,$1表示第一


个参数,$2表示第二个参数,依此类推。   $0代表所执行命


令的名称,虽然$0与位置变量的格式相同,但是$0属于预定义


变量而不是位置变量。  13. 什么是预定义变量? 预定义变


量是Shell内部已经定义好的变量,其值是由Shell根据系统环


境的变化自动赋值,不能进行手工更改。所有预定义变量都是


由$符号加上另外一个符号组成,用户通过他们可以获得当前


脚本程序的运行信息,常用的预定义变量有:     $#  表示


位置参数的数量。     $*  表示所有位置参数的内容。     


$?  表示命令执行后返回的状态,返回0表示成功执行,其他


表示错误执行。     $$  表示当前进程的进程号。     $!  


表示后台运行的最后一个进程号。     $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(执行别名命令,进行光盘


的挂载)   当自定义的别名命令与系统中的命令重名时,该


命令执行时,系统调用执行的是别名命令。   #unalias 


benet(取消别名命令“benet”)   用户定义的别名,只在


当前用户Shell环境中有效,下次重启动后,定义的别名将消


失,因此,用户固定使用的自定义别名命令应保存在用户宿主


目录的“.bashrc”文件中。   系统定义的别名命令,保存在


“/etc/profile.d/”目录中的配置文件中,这些配置文件,


在每次用户登录时,用来配置用户的环境,因此,用户


用“unalias”命令取消的系统定义的别名,在下次启动后,


会恢复回来。  16. 输入输出的种类有哪些? Linux系统中对


所有的设备都通过文件的形式来引用,而每一个文件在Linux


系统内核中都分配一个文件描述符(非负整数)。 ① 标准输


入:固定的0号文件描述符被分配给标准输入文件(stdin),


通常对应终端的键盘。 ② 标准输出:1号文件描述符分配给


标准输出文件(stdout),通常对应终端的屏幕。 ③ 标准错


误:2号文件分配给标准错误输出文件(stderr),也对应终


端的屏幕。 shell在启动时会打开0、1、2三个标准输入输出


文件,在用户执行命令没有指定输入输出文件时,缺省使用这


3个输入输出文件来读写信息。  17. 什么是输入重定向?   


输入重定向就是将某命令接收输入的途径由默认的键盘更改为


指定的文件,即改变了命令的输入源。    输入重定向需要使


用“<”重定向操作符。   #wc < myfile(把文本文件


myfile中的内容做为键盘的输入,交给wc命令进行处理) 18. 


什么是输出重定向? 
输出重定向是将命令的输出结果定向到指定的文件中,而不输


出到标准输出文件(显示器)中。   输出重定向需要使用“>


”和“>>”重定向操作符。   #ls /etc/ > myfile(把ls命


令的输出结果,保存到myfile文件中)   #ls /dev/ > 


myfile(把ls命令的输出结果,覆盖保存到myfile文件中)   


#ls /bin/ >> myfile(把ls命令的输出结果,插入保存到


myfile文件中)  19. 什么是错误重定向?   当我们输入错


误的命令时,系统提供的错误提示信息将显示在屏幕上,可以


将这些错误信息重定向到指定的文件。   错误重定向需要使


用“2>”重定向操作符。   #nocmd 2> errfile(“nocmd”


是一条不存在的命令,键入该命令后,系统会出现错误提示信


息,把这些提示信息保存到errfile文件中)  20. 输出重定


向和错误重定向如何组合使用?   如果需要将标准输出和错


误输出重定向到同一个文件,需要使用“&>”重定向操作符。 


  例,在当前目录中,有文件afile和allfile,执行下面的命


令: #ls afile bfile &> allfile   将标准输出和错误输


出同时重定向到了文件allfile中。(因为有afile文件,所以


有标准的输出结果;因为没有bfile文件,所以要报错)  21. 


什么是管道?   通过管道符“|”,可以把多个简单的命令


连接起来,实现复杂的功能。   管道符左边的命令的执行结


果,作为管道符右边的命令的操作源。   #ls /etc/ | head 


-2(显示出/etc/目录下的文件列表中的前两行)   #ls 


/etc/ | grep net(显示出/etc/目录下的文件列表中带有字


符串“net”的行)  22. 什么是Shell脚本?   ① Shell脚


本程序类似于DOS中的批处理文件,是Shell命令语句的集合,


用于实现特写的功能。   ② Shell脚本程序保存在文本文件


中,可以使用文本处理程序进行阅读和编辑。   ③ Shell脚


本程序是由Shell环境解释执行的,不需要在执行前进行编译


。   ④ 执行Shell程序时,Shell脚本文件需要具有可执行的


属性。  23. 编写一个完整可运行的Shell脚本需要哪些步骤


?   ① 建立Shell脚本文件。   #vi hello.sh(创建脚本


文件hello.sh,并打开此文件)   ② 编辑脚本文件,在脚本


中输入内容。   #!/bin/bash(表示需要使用Bash对此脚本


进行解释执行)   #This is my first program.(以“#”


开头的句子,是注释语句,即说明信息)   echo Hello 


World!(用“echo”命令,在屏幕上显示字符串“Hello 


Word!”)   ③ 存盘退出。   ④ 为属主添加hello.sh文件


的可执行属性。   #chmod u+x hello.sh(为属主添加可执


行属性) 
24. 如何运行脚本程序?   执行脚本程序的方法有三种:   


① 用bash命令,调用脚本程序。   #bash hello.sh     ② 


用“.”命令,调用脚本程序。   #. Hello.sh     ③ 直接


输入脚本文件名,调用脚本程序。   


#/home/teacher/hello.s

原创粉丝点击