一、什么是变量

  变量:一个字眼,用来替代另一个比较复杂或者是容易变动的数据。

  变量的优势:可变性、方便性

二、变量内容的设置

关键词:变量,变量名称,变量的内容(我默认将变量与变量名称等价)

  方法:变量=变量的内容

  注:一个变量未被设置内容时,默认的内容是“空”的。

【变量的设置规则】

  1. 变量与变量的内容以一个等号“=”来连接
  2. 等号两边不能直接接空格符
  3. 变量名称只能是英文字母与数字,并且开头字符不能是数字
  4. 变量内容若有空格符可使用双引号(特殊字符仍是特殊字符)或单引号(特殊字符仅为纯文本)将变量内容结合起来
  5. 可用转移字符“\”将特殊符号(如[Enter]、$、\、空格符、!等)变成一般字符
  6. 在命令中还需要引用其他命令时,可使用“$(命令)”或“``命令`”
  7. 增加变量内容时,可用“"$变量名称"”或“${变量}”累加内容
  8. 取消变量的方法为“unset 变量名称”

【示例区】

  设置变量内容:path=${PATH}    //将PATH内容赋给变量path

  双引号保留特殊符号:var="lang is $LANG"      //打印结果为lang is en_US

  单引号仅为一般字符:var='lang is $LANG'      //打印结果为lang is $LANG

  规则6的示例:version=$(uname -r)          //命令uname -r打印内核版本

  追加变量内容:PATH="$PATH":/home/bin       //红色部分为追加内容

三、显示变量的内容

关键词:变量的内容

  命令:echo

  注意点:变量的内容在被显示时,变量前面必须要加上字符“$”才行

ps:请在屏幕上显示出你的环境变量PATH。

  法一:echo $PATH

  法二:echo ${PATH}

四、环境变量

摘要:查看环境变量、常用环境变量、PS1、$、?

1. 查看环境变量

  命令:env    //列出目前shell环境下的所有环境变量与内容

2. 常见环境变量

 HOME:HOME=/home/liuyu

 解释:HOME代表用户的主文件夹。我们使用命令“cd ~”或“cd”回到用户主文件夹,就是使用这个变量,有很多程序都可能会用到这个变量的值。

 SHELL:SHELL=/bin/bash

 解释:它告知我们目前这个环境使用的shell是哪个程序?Linux是默认使用/bin/bash的。

 PATH:PATH=/home/liuyu/bin:/home/liuyu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

 解释:就是执行文件查找的路径,目录与目录中间以冒号分隔,由于文件的查找是依序由PATH的变量内的目录来查询,所以目录的顺序也是很重要的。

 MAIL:MAIL=/var/spool/mail/liuyu

 解释:当我们使用mail这个命令在收信时系统会去读取的邮件信息文件。

 HISTSIZE:HISTSIZE=1000

 解释:这个与“历史命令”有关,即文件~/.bash_history可以记录命令的条数

3. PS1(提示符的设置)

  PS1就是我们的“命令提示符”。

  当我们每次按下[Enter]按键去执行某个命令后,最后要再次出现提示符时,就会主动去读取这个变量值了。

  PS1=' [\u@\h \W]\$ '    //PS1的内容是一些特殊符号,这些特殊符号可以显示不同的信息

【符号意义】

  • \u:目前用户的账号名称
  • \h:仅取主机在第一个小数点之前的名字
  • \W:利用basename函数取得工作目录名称,所以仅会列出最后一个目录名
  • \w:完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以~替代
  • \$:提示符。如果是root时,提示符为#,否则就是$
  • \@:显示时间,为12小时格式的“am/pm”样式
  • \#:执行的第几个命令

4. $(关于本shell的PID)

  $本身也是个变量。这个代表的是目前这个shell的线程代号,即是所谓的PID。

  命令:echo $$        //显示我们的shell的PID

5. ?(关于上个执行命令的回传码)

  ?也是一个变量。

  这个变量是上一个执行的命令所回传的值。

  当我们执行某些命令时,这些命令都会回传一个执行后的代码。

  成功执行,则回传一个0值;失败执行,则回传任意非0值。

五、语系变量

关键词:语系,语系变量

1. 查看我们的Linux支持的语系

  命令:locale -a

2. 常见语系

  zh_CN.utf8、en_US.utf8、C

3.  查看各个环境下使用的编码

  命令:locale

  显示结果:

LANG=zh_CN.UTF-8           //主语言的环境
LANGUAGE=zh_CN:zh
LC_CTYPE="zh_CN.UTF-8"        //字符(文字)辨识的编码
LC_NUMERIC="zh_CN.UTF-8"       //数字系统的显示信息
LC_TIME="zh_CN.UTF-8"         //时间系统的显示数据
LC_COLLATE="zh_CN.UTF-8"       //字符串的比较与排序等
LC_MONETARY="zh_CN.UTF-8"      //币值格式的显示等
LC_MESSAGES="zh_CN.UTF-8"      //信息显示的内容,如菜单、错误信息等
LC_ALL=                  //整体语系的环境

  上面显示出许多语系变量及其变量内容,我们可以自定义每个语系变量的内容,如果有语系变量未设置,那么这些语系变量将会被LANG或LC_ALL这两个变量所替代。

4. 使语系变量内容的设置永久有效

  在命令行设置语系变量的内容仅在此次生效,如果要永久有效,我们就需要修改相应的配置文件。

  整体系统默认的语系定义:/etc/sysconfig/i18n

六、read

  之前我们的变量内容都是直接在命令行直接设置的,现在我们要让用户能够经由键盘输入变量的内容。

  命令:read [-pt] 变量    //-p后面接提示符,-t后面接等待的秒数

七、declare

  bash中变量的默认类型为字符串,我们可以使用declare声明变量的类型。

  命令:declare [-aixr] 变量  //-r将变量设置为readonly类型(不可被更改内容)

八、数组(array)变量类型

  设置方式:数组名[index]=content

  读取数组:${数组}

ps:设置var[1]~var[3]的变量,并打印内容

var[1]="small min"
var[2]="big min"
var[3]="nice min"
echo "${var[1]}, ${var[2]}, ${var[3]}"

  

九、变量内容的删除、替换

  之前关于变量内容的设置都指整个变量内容,我们就要讲讲对变量的内容进行微调。

  先抛出一张表:

变量设置方式 说明
${变量#关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除
${变量##关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除
${变量%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除
${变量%%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串} 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换
  • 示例:echo $PATH

打印:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  • 示例:echo $MAIL

打印:/var/spool/mail/liuyu

1. 变量内容的部分删除

  • 题目1:删除PATH变量内容中的前两个目录

即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${PATH#/*liuyu/bin:}

  • 题目2:删去PATH变量内容中的第一个目录

即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${PATH#/*:}

  • 题目3:删除PATH变量内容中所有目录,仅保留最后一个目录

即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${PATH##/*:}

  • 题目4:删除PATH变量内容中的最后一个目录

即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${PATH%:*bin}

  • 题目5:删除PATH变量内容中所有目录,仅保留第一个目录

即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${PATH%%:*bin}

  • 题目6:仅保留MAIL变量中最后一个文件名

  即删去内容中的红色部分:/var/spool/mail/liuyu

  命令:echo ${MAIL##/*/}

  • 题目7:仅删掉MAIL变量中最后一个文件名

  即删去内容中的红色部分:/var/spool/mail/liuyu

  命令:echo ${MAIL%/*}

2. 变量内容的部分替换

  题目1:将PATH变量内的sbin都替换为SBIN

即修改目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${path//sbin/SBIN}

  题目2:将PATH变量内的第一个sbin替换为SBIN

即修改目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

  命令:echo ${path/sbin/SBIN}

十、变量的测试与内容替换

1. 判断某变量是否存在

  命令:echo $变量

  结果:若出现变量内容则表示该变量存在;若出现空白,则变量可能不存在,也可能是空字符串。

2. 变量内容的替换

  • 题目:测试一下是否存在username这个变量,若不存在则给予username内容为root

  命令:username=${username-root}

  解读:若变量username存在(即使其内容为空字符串),则不改变其内容;否则将其内容改变为root。

  • 题目:测试一下是否存在username这个变量,若不存在或为空串则给予username内容为root

  命令:username=${username:-root}

  解读:username内容为空串时,其内容也会被替换为root;而如果变量存在且内容非空串,则不改变。

附录

  1. set:列出所有的变量及其内容
  2. declare:同set
  3. ulimit:与文件系统及程序的限制关系

学习bash——变量的更多相关文章

  1. Linux学习 - Bash变量

    一.用户自定义变量(本地名) 用户自定义变量只有在当前的shell中生效 1 定义变量 name="zheng huiwei" aa=123 2 变量叠加 aa="$aa ...

  2. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  3. linux学习18 shell脚本基础-bash变量和逻辑运行

    一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...

  4. 第十一章、认识与学习BASH

    第十一章.认识与学习 BASH 最近升级日期:2009/08/25 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 ...

  5. 第十一章、认识与学习 BASH

    第十一章.认识与学习 BASH 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 shell 与 /etc/shel ...

  6. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  7. linux bash变量作用域

    linux bash变量作用域 一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的? shell会去$PATH环境变量定义的目录里去找这个命令.环境变量里一般包括/usr ...

  8. 认识与学习BASH①——鸟叔的Linux私房菜

    文章目录 认识与学习BASH① 认识BASH 壳程序 多种shells Bash shell 的功能 type :查询指令是否为Bash shell 的内置指令 指令的换行输入和快速删除 Shell的 ...

  9. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

随机推荐

  1. UIlable上下居中

    - (void)setView{ self.chooseImg = [[UIImageView alloc] initWithFrame:CGRectMake(TO_LEFT_D, (ROW_HEIG ...

  2. java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  3. python排序算法的整理

    #冒泡排序,主要思想:从第一个元素开始,向尾部开始比较大小换位置 def bubble_sort(alist): for j in range(len(alist)-1,0,-1): for i in ...

  4. Keras模型的保存方式

    Keras模型的保存方式 在运行并且训练出一个模型后获得了模型的结构与许多参数,为了防止再次训练以及需要更好地去使用,我们需要保存当前状态 基本保存方式 h5 # 此处假设model为一个已经训练好的 ...

  5. win10家庭版升级为win10专业版

    windows10 升级钥匙: DR9VN-GF3CR-RCWT2-H7TR8-82QGT 亲测可用

  6. Delphi方法重载

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  7. 3. 进程间通信IPC

    一.概念 IPC: 1)在linux环境中的每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间是不能相互访问. 2)如果进程间要交换数据必须通过内核,在 ...

  8. 基于OMAPL:Linux3.3内核的编译

    基于OMAPL:Linux3.3内核的编译 OMAPL对应3个版本的linux源代码,分别是:Linux-3.3.Linux-2.6.37.Linux2.6.33,这里的差距在于Linux2,缺少SY ...

  9. array_x

    import java.util.*; public class array_x { public static void main(String args[]) { int a[][]={{2,4, ...

  10. win10在此处打开命令cmd

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令 ...