Shell变量的使用

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命令

Shell变量的使用_第1张图片

 另外,“.”代表当前路径,无论当前工作目录在哪,“.”都可以指代它,所以例如执行“/.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中有几个字符有特殊含义

双引号:双引号内出现的特殊字符保持原来含义。

单引号:单引号内的字符失去原义,当成普通字符处理。

$符号:$的含义为取变量值。

\字符:转义字符。

Shell变量的使用_第2张图片

 

你可能感兴趣的:(shell,局部变量,bash)