Linux系列教程(二十二)——Linux的bash变量

  上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的。本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫。

1、什么是变量

  变量是计算机内存的单元,其中存放的值可以改变。

  当 shell 脚本需要保存一些信息时,如一个文件名或者一个数字,就把它放在一个变量里。每个变量都有一个名字,可以根据名字来引用变量。

  使用变量可以保存有用信息,使系统获知用户的相关设置,变量也可以保存暂时信息。

2、变量的声明规则

3、变量的分类

4、用户自定义变量的用法

  用户自定义变量也就是本地变量。只在当前 shell 中生效。

  ①、变量定义

变量名=变量值

  ②、变量调用

$变量名

  ③、变量查看

set

  set 是查看当前系统中定义的所有变量。

  ④、变量删除

unset 变量名

5、环境变量的用法

  环境变量主要保存的是和系统操作环境相关的变量。

  前面讲的用户自定义变量(本地变量)只在当前shell 中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件中,那么这个环境变量就会在所有的shell中生效。

  ①、通过 pstree 命令区分当前shell 的级别是父还是子

  ②、声明环境变量

export 变量名=变量值

  ③、查询所有环境变量

env

  前面讲的 set 命令是查看所有变量,而 env 是查看环境变量。

  ④、查看、删除指定环境变量

$变量名          #查看环境变量
unset 变量名   #删除环境变量

  这两个和本地变量一样。

  ⑤、系统查找命令的路径环境变量 $PATH

我们知道调用命令必须要是在当前目录,或者是用绝对路径进行。但是实际上我们调用某个命令直接使用命令名就可以了,比如cd,ls等等这些常用的,这是为什么呢?

  原因就是在 $PATH 里面我们已经定义好了,我们执行某个名称的命令,系统会首先去$PATH里面查找,如果找不到才会报找不到命令错误。

首先看一下$PATH:

  可以看到,$PATH 里面都是保存的一些路径,然后通过:分隔。

  前面我们写过一个 hello.sh 的脚本,我们知道要想执行它,必须首先赋予可执行权限,然后要么在当前目录通过./hello.sh来执行,要么通过绝对路径/tmp/hello.sh来执行。如果我们想直接通过 hello.sh 来执行呢?

  解决办法就将hello.sh的所在路径添加到 $PATH 变量中,如下:

  ⑥、定义系统提示符的变量 $PS1

6、位置参数变量的用法

7、预定义变量的用法

  其实预定义变量也是位置参数变量的一种,有如下几种用法:

 8、声明变量类型 declare

9、数值运算的三种方法

  ①、declare -i 

  ②、expr 或 let 数值运算工具

  ③、$((运算式)) 或 $[运算式]

10、运算符及其优先级顺序

11、变量测试与替换

12、环境变量配置文件

  前面我们在将环境变量的时候,我们将脚本的路径加入到 $PATH 路径中,然后就可以直接通过脚本的名称来执行脚本。但是如果系统重启之后,发现又必须要重新加入到 $PATH 变量中才可以。那么有没有让它一直生效的方法呢?

  解决办法就是在环境变量配置文件中加入脚本的路径。

  环境变量配置文件中主要定义对系统的操作环境生效的系统默认环境变量,比如 PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。分别有以下配置文件:

  下图是环境变量文件的读取顺序:(用户每次重新登录的时候就会重新读取下面的配置文件)

  我们知道 $PATH 变量,用户每次登录,就会从上面的文件读取顺序读取所有配置文件,最后得到 $PATH 变量的值。

  注意:越往后面的配置文件,里面配置的变量内容优先级越高。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python

python——模块和包 需要注意的地方

一 模块 1.import import module:   将执行文件(module)的目录路径插入到sys.path的第一个位置 执行时:   1.创建新...

20510
来自专栏性能与架构

nginx rewrite

rewrite的作用 rewrite可以实现url的重定向,把用户请求的url转发到另一个url,但用户浏览器地址并不改变 例如常用的伪静态化,就是通过rewr...

3715
来自专栏瓜大三哥

matlab GUI基础3

低级文件I/O 1.文件读取 fopen:文件打开 fclose:文件关闭 fread:二进制数据的读取 fwrite:二进制文件写入 fgetl:逐行读取 f...

21110
来自专栏Java 源码分析

Linux小记

正文 定义别名: alias vi='vim' 查看别名: alias 让某个用户永久生效 vim ~/.bashrc 删除别名 ualias vi 快捷键: ...

3145
来自专栏数值分析与有限元编程

Fortran知识 | 代码错误(insufficient virtual memory)

如图所示,提示为:insufficient virtual memory ? 程序试图访问一个受保护或者不存在的地址。多数为可分配数组、指针等动态内存引发的错误...

3857
来自专栏mwangblog

Linux中的管道命令(一)

1934
来自专栏前端知识分享

Vue---从后台获取数据vue-resource的使用方法

  作为前端人员,在开发过程中,我们大多数情况都需要从后台请求数据,那么在vue中怎样从后台获取数据呢?接下来,我简单介绍一下vue-resource的使用方法...

3091
来自专栏企鹅号快讯

Python模块

Python模块 可以将代码量较大的程序分割成多个有组织的、彼此独立但又能相互交互的代码片段,这些自我包含的有组织的代码段就是模块 模块在物理形式上表现为以.p...

2557
来自专栏xingoo, 一个梦想做发明家的程序员

python项目实现配置统一管理的方法

一个比较大的项目总是会涉及到很多的参数,最好的方法就是在一个地方统一管理这些参数。最近看了不少的python项目,总结了两种很有意思的配置管理方法。

2641
来自专栏闵开慧

mapreduce主程序如何传递变量到map或者reduce函数中使用

    一般我们写的mapreduce主程序放在客户端机器上,执行任务时是在集群机器上,所以要将变量从主程序传递到我们自己写的map或者reduce函数中就不能...

4255

扫码关注云+社区

领取腾讯云代金券