变量名规则:字母、数字、下划线开头

Bash中,变量分为四大类:用户自定义变量,环境变量,位置参数变量,预定义变量

  • 用户自定义变量:最常用的
  • 环境变量:主要保存和系统操作环境相关的数据
  • 位置参数变量:用来向脚本传递参数和数据,传参,所以变量名和变量作用都是固定的,不能自定义
  • 预定义变量:Bash中已经定义好的变量,变量名和变量作用都是固定的,不能自定义

Bash中,变量默认是字符串型,若要进行数值运算,需指定变量类型为数值

注意事项:

  1. 赋值时,等号两侧不能有空格。如:name=hyk 正确;name = hyk 错误
  2. 变量的值有空格时,需要用双引号""或单引号''括起来。如:name="zhang san"
  3. 变量的值,可以使用"\"转义。
  4. 要把命令的结果作为变量的值,赋值时要用 /命令名 或者 $(命令名)
  5. 环境变量名建议大写。因为系统命令都是小写,便于区分环境变量和系统命令

一、用户自定义变量

1、定义与调用变量

定义格式:变量名=变量值

变量值有空格时要用双引号""或单引号''括起来

如:name=hyk,name="zhang san"

调用格式:$变量名

如:输出变量name的值:echo $name

2、变量叠加

变量与变量叠加

变量的格式:$变量名

例如:

变量与常量叠加

变量的格式:${变量名} "$变量名"

例如:

3、查看所有变量 set

命令:set

作用:查看系统当中所有变量(包括系统变量、环境变量、用户自定义变量等等)

扩展:查到的变量特别多,很难找到自己想要的,可以用set | grep [变量名] 管道符连接来查找

4、删除变量 unset

命令:unset [变量名]

例如:

二、环境变量

1、环境变量与用户自定义变量区别

  1. 用户自定义变量只在当前Shell生效,环境变量会在当前Shell以及这个Shell下的所有子Shell生效
  2. 如果把环境变量写入相应的配置文件,那么环境变量会在所有的Shell中生效

2、关于父Shell和子Shell

linux登陆进去默认在Bash这个shell里,这时若你再进入csh,则这个csh是默认的Bash 的子Shell。

可以用命令pstree,里面找到含有"pstree"的这一行看当前在第几层Shell。

例如:

  • 先输入命令csh进入子Shell
  • 再用pstree查看当前在哪个Shell

注意:不能用 pstree | grep pstree 直接找到这一行,因为pstree这个命令是以树的格式呈现,整个显示内容都是在一行里。

可以看到,没能完整显示出来。

3、设置环境变量 export

语法:

  • export [变量名]=[变量值] : 定义一个变量为环境变量
  • export [变量名] : 把定义过的用户自定义变量设为环境变量

例如:

  • 设置用户自定义变量name=hyk,设置环境变量export sex=male
  • 这时进入一个子Shell,csh,分别输出name和sex的值

可以看到,sex变量存在,name变量不存在,因为环境变量能作用于子Shell,用户自定义变量不行

4、查询环境变量 env

命令:env

set命令是查看所有变量,env命令只查看环境变量

例如:同样可以env | grep [变量名] 直接查找到这个变量

5、系统的环境变量——PATH

linux直接执行文件都需要用绝对路径,但为什么像ls、cd等命令能直接执行,不需要用绝对路径呢?

因为他们放在PATH环境变量里,PATH变量的路径下的文件能直接执行,不需要使用绝对路径的方式。

注:linux区分大小写,PATH变量名要大写。

执行该文件不需要绝对路径(临时)的两种方法

注:下面这两种方法都是临时的,重启后就失效,想要永久生效需要把文件写入配置文件中,后面的章节再讲

方法一:把文件拷贝到PATH的路径下

这种方法不常用,因为容易把系统命令和我们写的文件搞混,推荐用的是方法二

比如:

写了一个输出"helloworld"的文件,名为hello,直接执行:

可以看到直接执行报错了,用路径格式执行才可以。

把这个文件拷贝到 PATH路径的/usr/bin中:cp hello /usr/bin

可以看到,能直接执行了。

方法二往PATH变量里加路径

推荐用这种方法!!

相当于变量和常量组合。在上一节“用户自定义变量”中讲过变量叠加的方法

语法PATH=${PATH}[路径名]

5、删除环境变量 unset

和删除用户自定义变量一样,用unset [变量名]