上篇博客我们介绍了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 变量的值。

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

  

  

  

  

    

    

Linux系列教程(二十二)——Linux的bash变量的更多相关文章

  1. Linux系列教程(十)——Linux文本编辑器vim

    通过前面几篇博客我们终于结束了Linux常用命令的介绍,Linux常用命令主要包括以下: ①.Linux文件和目录处理命令 ②.Linux链接命令和权限管理命令 ③.Linux文件搜索命令 ④.Lin ...

  2. Linux系列教程(十二)——Linux软件包管理之yum在线管理

    上一篇博客我们介绍了rpm包管理之rpm命令管理,我们发现在使用rpm命令手动安装rpm包的时候,会发现安装遇到到的依赖让你痛不欲生,安装一个rpm时会要先先安装某个依赖的rpm,而安装这个依赖的rp ...

  3. Linux系列教程(十六)——Linux权限管理之ACL权限

    通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow ...

  4. Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令

    通过前面两篇博客,我们介绍了Linux系统的权限管理.Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这在Linux只能对于一个文件只能有所有者权限 ...

  5. 【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

    http://blog.csdn.net/xiaominghimi/article/details/51586492 一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解R ...

  6. 数据挖掘入门系列教程(十二)之使用keras构建CNN网络识别CIFAR10

    简介 在上一篇博客:数据挖掘入门系列教程(十一点五)之CNN网络介绍中,介绍了CNN的工作原理和工作流程,在这一篇博客,将具体的使用代码来说明如何使用keras构建一个CNN网络来对CIFAR-10数 ...

  7. Linux系列教程(四)——Linux文件和目录处理命令

    这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法.那么从这篇博客开始,我们就正式进入Linux命令的学习.学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条 ...

  8. Linux系列教程(四)——Linux常用命令之文件和目录处理命令

    这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法.那么从这篇博客开始,我们就正式进入Linux命令的学习.学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条 ...

  9. Linux系列教程(一)——Linux系统简介

    本系列教程将完整的讲解整个Linux相关的知识,这是楼主学完之后重新对Linux知识体系的整理.从最基础的知识开始,对于一个完全不懂Linux系统的人,相信在看完整个系列教程之后,都能对Linux有一 ...

  10. Linux系列教程(三)——Linux学习技巧

    前面我们讲了Linux系统的详细安装教程,大家跟着教程一步一步的操作,应该能完美的完成安装.那么这篇博客跟大家聊聊如何来学习Linux. 1.工欲善其事必先利其器 ①.第一个问题:通过前面在虚拟软件中 ...

随机推荐

  1. C-Flex 与 box布局教程

    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html -阮一峰老师 http://www.w3cplus.com/css3/flexbox- ...

  2. webpack2使用ch9-处理模板文件 .html .ejs .tpl模板使用

    1 目录展示 安装依赖 "ejs-loader": "^0.3.0","html-loader": "^0.4.5", ...

  3. ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构

    大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...

  4. Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要

    1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ...

  5. Myeclipse 配置Tomcat 出现 “Value must be an existing directory”错误

    今天上午配了一下本机上的Myeclipse的tomcat,因为我本机上有两个版本的myeclipse,一个是用来公司开发的,一个是自己玩的,本机上装了两个版本jdk和两个版本的tomcat.配置自己玩 ...

  6. codesmith连接Mysql提示“找不到请求的 .Net Framework Data Provider。可能没有安装。"

    1,首先需要将MySql.Data.dll复制到codesmith安装目录下bin文件夹下,注意dll的版本 2,其次因为codesmith7采用的是.net4.0的配置文件,(64位系统)找到C:\ ...

  7. Html 初识样式表&选择器

    样式表&类选择器分类 样式表分类: 1.内联式样式表:在标签内部写样式代码,精确但不方便,增加工作量,后期修改麻烦. 2.嵌入式样式表:一般写在head内 以<style>.... ...

  8. js的解析顺序 作用域 严格模式

    一.javascript的解析顺序 我们大家所理解的代码的执行顺序都是从上到下的,但是实际上确不是这样的.我们看一下下面的代码. 1 alert(a); 2 var a = 1; 如果执行顺序是从上到 ...

  9. 基于JavaBean编辑器读取peroperties文件

    引言 最近在重读<精通Spring+4.x++企业应用开发实战>这本书,看到了有关JavaBean编辑器的部分,了解到PropertyEditor和BeanInfo的使用.不得不说,Bea ...

  10. LeetCode 442. Find All Duplicates in an Array (在数组中找到所有的重复项)

    Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...