参考教程:http://www.92csz.com/study/linux/12.htm
内容基本一致,本博客仅仅是用于个人摘抄记忆。
Shell脚本基础知识
什么是shell
首先shell的英文含义是“壳”;它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息。
shell在Linux中的存在形式
由于Linux不同于Windows,Linux是内核与界面分离的,它可以脱离图形界面而单独运行,同样也可以在内核的基础上运行图形化的桌面。这样,在Linux系统中,就出现了两种shell表现形式,一种是在无图形界面下的终端运行环境下的shell,另一种是桌面上运行的类似Windows的MS-DOS运行窗口,前者我们一般习惯性地简称为终端,后者一般直接称为shell。
shell如何执行用户的指令
shell有两种执行指令的方式。
第一种方法是用户事先编写一个sh脚本文件,内含shell脚本,而后使用shell程序执行该脚本,这种方式,我们习惯称为shell编程。
第二种形式,则是用户直接在shell界面上执行shell命令,由于shell界面的关系,大家都习惯一行行的书写,很少写出成套的程序来一起执行,所以也称命令行。
一般我们关注Bash,即Bourne Again Shell,因为其易用和免费,Bash 在日常工作中被广泛使用。(当然还有其他Shell,如Korn Shell等)
总结:shell可以说只是为用户与机器之间搭建成的一个桥梁,让我们能够通过shell来对计算机进行操作和交互,从而达到让计算机为我们服务的目的。
相关前置知识
记录命令历史
我们敲过的命令,Linux是有记录的,预设可记录1000条历史命令,保存在用户的家目录中的.bash_history文件中。有一点需要注意的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。
与命令历史相关的字符是”!”。常用的有三个:
(1)!! (连续两个”!”),表示执行上一条指令;
(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;
(3)!字符串,例如!ta,表示执行命令历史中最近一次以ta为开头的指令。
指令和文件名补全
tab补全
别名
alias是bash所特有的功能。我们可以通过alias把一个常用并且较长的指令别名为一个简洁易记的指令。如果要取消,直接用unalias即可。直接输入alias可以看到系统中使用了alias别名的指令。
alias语法很简单,alias [命令别名]=[’具体的命令’]。
通配符
在bash下,可以使用*来匹配零个或多个字符,用?匹配一个字符。
图中,由于?无法匹配0个字符,因此找不到对应文件。
输入输出重定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>。
管道符
|是管道符,把前面的命令执行结果输送到管道符后的命令作为参数执行。
作业控制
当运行一个进程时,你可以使它暂停(ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(ctrl+c)。
变量
简单介绍
在前面的博文中,我们有接触过环境变量PATH,这个环境变量就是shell预设的一个变量,通常shell预设的变量都是大写的。变量,说简单点就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。
就拿PATH来讲,这个PATH就代替了所有常用命令的绝对路径的设定。因为有了PATH这个变量,所以我们运行某个命令时不再去输入全局路径,直接敲命令名即可。
使用env指令,可以列出系统预设的全部系统变量。不过登录的用户不同,这些环境变量的值也不一样。
(后面还有好多)
常见环境变量:
env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来。set不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来。用户自定义变量如下:
不过,该变量只能在当前shell中生效。如果要想设置的变量一直生效,有两种方法:
希望系统内所有用户登录后都能使用该变量,需要在/etc/profile文件最末行加入”export myname=Aming”,然后运行”source /etc/profile”就可以生效了。此时你再运行bash命令或者直接su - test账户看看。
只想让当前用户使用该变量,需要在用户主目录下的.bashrc文件最后一行加入”export myname=Aming”然后运行”source .bashrc”就可以生效了。这时候再登录test账户,myname变量则不会生效了。上面用的source命令的作用是,将目前设定的配置刷新,即不用注销再登录也能生效。
Linux自定义变量规则
- 设定变量的格式为”a=b”,其中a为变量名,b为变量的内容,等号两边不能有空格;
- 变量名只能由英、数字以及下划线组成,而且不能以数字开头;
- 当变量内容带有特殊字符(如空格)时,需要加上单引号;
- 如果变量内容中本身带有单引号,需要使用双引号;
- 如果变量内容中需要用到其他命令运行结果则可以使用反引号`;
- 变量内容可以累加其他变量的内容,需要加双引号;
系统环境变量与个人环境变量的配置文件
/etc/profile: 这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等
/etc/bashrc: 这个文件主要预设umask以及PS1。
(并不懂,按照作者的意思,这里是\u就是用户,\h 主机名, \W 则是当前目录,$就是那个’#’了,如果是普通用户则显示为’$’(即画红线部分),其他部分的字符我就不明白了。
除了两个系统级别的配置文件外,每个用户的主目录下还有几个这样的隐藏文件:
.bash_profile: 定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入用于自己使用的shell信息,当用户登录时,该文件仅执行一次。
.bashrc: 该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。
.bash_history: 记录命令历史。
.bash_logout: 当退出shell时,会执行该文件。可以把清理工作放到这个文件中。