一、什么是变量

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

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

二、变量内容的设置

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

  方法:变量=变量的内容

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

【变量的设置规则】

  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. ListItem Updating事件监视有没有上传附件

    using System; using System.Collections.Generic; using System.Text; using Microsoft.SharePoint; using ...

  2. Java基础——线程复习总结

                                                                                                    线程 T ...

  3. 菜鸟笔记 -- Chapter 6.4.3 多态

    6.4.3  多态 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方 ...

  4. 字段中有空的时候 进行逻辑运算,mysql 与 oracle 处理函数IFNULL() 与 nvl() ,选取NULL 值 。

    mySQL数据库: SELECT id_p,IFNULL(math,0)+IFNULL(english,0) 总分 from mytest_brian1 Oracle 数据库: select  id_ ...

  5. maven 打包失败 提示找不到jar的问题

    服务打包的时候发现打包失败,查看原因大概是找不到jar包,但是本地仓库有.最终的解决的办法是使用maven 命令重新把jar包安装到本地仓库. 命令如下:mvn install:install-fil ...

  6. (转)redis是什么

    1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  7. 【linux下dhcp服务的简单搭建及优化部署】

    dhcp server: 1::vim /etc/sysconfig/network-scripts/ifcfg-scfg:配置 server的 static IP: 2:vim /etc/dhcpd ...

  8. mongodb的windows系统下安装

    先下载安装包,地址有下面两个,按需选择吧. https://www.mongodb.com/download-center/v2/community https://www.mongodb.org/d ...

  9. 微信小程序缓存

    购物车数据加入缓存,相同的商品值修改数量,然后再次加入缓存中 修改购物车的数据的时候同理,都是修改缓存数据然后加入到缓存中. 具体的使用方法看官方文档,我只是提供思路

  10. 使用mysql5.7版本数据库需要注意的地方/持续更新

    数据库mysql 5.7版本的初始密码修改 安装完后实在是找不到初始密码的文件,后面发现再错误日志中 先关闭mysql pkill mysqld 安全模式启动数据库并修改密码 mysqld_safe ...