1.变量的种类
主要分以下几种:
1)局部变量:只在一定范围内使用的变量,旨在设定此变量的Shell中有用。
2)环境变量:在整个系统环境中使用,不但设定此变量的Shell中有效,而且在所有由此SHELL所衍生出的Shell中有效。
3)位置变量:主要记录命令及其选项值的变量,是只读的。
4)特殊形式变量:主要记录一些特殊值变量,是只读的。
2.Shell的类型机器配置文件
shell按类型可以分为父shell和子shell,或者是登陆shell和非登陆shell。
但成功登录shell后所获得的shell叫登录shell,而在以后打开的所有shell叫非登陆shell,例如可以执行
$ bash
这样又会打开一个shell,只是此shell已经是在前一个shell中又执行了一个程序的结果了,所有的命令都是在此shell中执行的,而与前一个shell无关,如果要回到上一个shell,只需执行
$ exit
这样就可以回到上一层shell,将上一层shell叫做父shell,将有父shell打开的shell叫做子shell。子shell会继承父shell的工作环境,包括当前的工作目录,进程权限等。
由此,可以看出,登录shell只有一个,非登陆shell可以有多个。任何一个shell都可以是另一个shell的父shell,登录shell永远不可能是子shell。
那么登录shell与非登陆shell有什么本质区别吗?
通过介绍几个系统配置文件,来说明二者的区别:
(1)./etc/bash.bashrc:系统环境设定文件,设定了一些环境变量和命令提示符。
(2)./etc/profile:系统启动的脚本文件,也是对系统环境进行了设定
(3)~/.bashrc:当前登录用户的宿主目录下的配置文件,对用户的个性化环境进行单独设定,设定了用户的别名等
(4)~/.profile:当登录用户的初始化文件
实际上他们的区别正是与这几个文件有关。对于登录shell来说,它会先读取/etc目录下的两个文件里的所有设定,然后去用户的宿主目录下再读取一下.bashrc和.profile文件,而对于非登陆shell来说,没打开一个非登陆shell,它只读取.bashrc和/etc/bash.bashrc文件而不再读取/etc/profile和profile文件这两个初始化文件里。
即,登录shell和非登陆shell的区别是执行时读取的文件不完全相同。登录shell所有文件全部读取,而非登陆shell并不读取初始化文件。
3.变量的定义及显示
1)定义一个变量
$ name="ubuntu"
2)使用echo命令显示变量
$ echo $ name
3)上面只是一个局部变量,如果执行bash命令打开一个子shell话,则无法使用该变量来
使用export命令导出变量后,就可以在bash中使用,即相当于全局变量
4)取消变量
$unset name
5)环境变量的使用,使用env命令
另外,“.”代表当前路径,无论当前工作目录在哪,“.”都可以指代它,所以例如执行“/.hxl.sh"就相当于执行了“~/hxl.sh“。
6)位置变量
$0:表示执行的程序名
$(1-9):代表的是传给程序的参数
${大于9的数字}:只要位置数大于大于9,就用{}括起来
7)特殊形式变量
$#:表示位置变量个数
$*:代表所有位置变量
$$:表示当前shell的PID值
$?:最近一个执行过的命令的退出值。
8)命令的执行顺序
&&:如果一个命令执行成功后才可以执行另一个命令
||:如果一个命令执行失败后才可以执行另一个命令
;:如果需要连续执行一组指令
9)命令替换
例如:
等价于
$ ls -l 'which mkdir' #提示错误,还请大神指点
10)I/O重定向
Linux使用的都是标准输入、标准输出和标准错误输出,三者分别用0,1,2表示。如果想将此命令的查询结果保存在一个文件里,这就需要重定向。重定向是将标准输入,标准输出和标准错误输出默认的设备进行改变,而重新指定一个输入和输出。其中
标准输入重定向用”<“来完成。
标准输出重定向用”“>”来完成。
标准错误输出重定向用“2>”来完成。
例:需要将/etc/passwd文件中的用户名以字母顺序排序,然后将排序过后用户列表不显示在屏幕上,而保存在/home/hxl/userlist文件中,可以执行命令:
11)管道
管道是指将一个命令的输出作为另一个命令的输入。
例如:
使用cat命令显示passwd的内容,但并没有显示在屏幕上,而是通过管道符“|”接受,而另一端的wc命令从管道取出内容进行统计,然后显示结果。实现了统计当前系统内的用户数。
12)特殊字符
shell中有几个字符有特殊含义
双引号:双引号内出现的特殊字符保持原来含义。
单引号:单引号内的字符失去原义,当成普通字符处理。
$符号:$的含义为取变量值。
\字符:转义字符。