上篇博客我们介绍了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. Python3常用学习网站总结(随时更新)

    Python资源大全 http://python.jobbole.com/84464/ https://github.com/jobbole/awesome-python-cn   scrapy: h ...

  2. 【转】 中兴OLT-C300常用命令

    中兴OLT C300show running-config (加载各种板卡)show gpon onu uncfg (查看OLT所有未配置的ONU)show gpon onu uncfg gpon-o ...

  3. Python 并发编程(一)之线程

    常用用法 t.is_alive() Python中线程会在一个单独的系统级别线程中执行(比如一个POSIX线程或者一个Windows线程)这些线程将由操作系统来全权管理.线程一旦启动,将独立执行直到目 ...

  4. [js高手之路]封装运动框架实战左右与上下滑动的焦点轮播图

    在这篇文章[js高手之路]打造通用的匀速运动框架中,封装了一个匀速运动框架,我们在这个框架的基础之上,加上缓冲运动效果,然后用运动框架来做幻灯片(上下,左右),效果如下: 1 2 3 4 5 // 0 ...

  5. 设置vim的默认工作路径同时与自动设当前编辑的文件所在目录为当前工作路径不冲突

    问题: 想让vim自动设当前编辑的文件所在目录为当前工作路径不冲突,但是当vim新建文件的时候,工作路径会又自动切换缓存path下. 如何使当使用vim打开文件时,vim的工作路径是当前文件所在的路径 ...

  6. 字符串解码DecodeString

    字符串解码 原创博客,转载请注明出处!eg:ss=2[abc]3[cd]ef   return:abcabccdcdcdefss=3[a2[c]]2[a]    return:accaccaccaas ...

  7. ubuntu16.04 配置opensips服务器并编译pjsip测试

    一.版本相关 1) ubuntu版本: 16.04 2) opensips版本:2.1.2 3) pjsip版本 :2.5.5 4) ffmpeg版本:3.3.4 5) sdl版本:2.0 6) vs ...

  8. Linux系统fdisk分区

    以下操作全部基于win7 64位系统上的Linux虚拟机(CentOS6.6). 当Linux虚拟机的硬盘空间不够用时,可以手动添加硬盘块,流程如下: 右键虚拟机,点击“Add”按钮: 选择“Hard ...

  9. LeetCode 122. Best Time to Buy and Sell Stock II (买卖股票的最好时机之二)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  10. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...