学习bash——变量
一、什么是变量
变量:一个字眼,用来替代另一个比较复杂或者是容易变动的数据。
变量的优势:可变性、方便性
二、变量内容的设置
关键词:变量,变量名称,变量的内容(我默认将变量与变量名称等价)
方法:变量=变量的内容
注:一个变量未被设置内容时,默认的内容是“空”的。
【变量的设置规则】
- 变量与变量的内容以一个等号“=”来连接
- 等号两边不能直接接空格符
- 变量名称只能是英文字母与数字,并且开头字符不能是数字
- 变量内容若有空格符可使用双引号(特殊字符仍是特殊字符)或单引号(特殊字符仅为纯文本)将变量内容结合起来
- 可用转移字符“\”将特殊符号(如[Enter]、$、\、空格符、!等)变成一般字符
- 在命令中还需要引用其他命令时,可使用“$(命令)”或“``命令`”
- 增加变量内容时,可用“"$变量名称"”或“${变量}”累加内容
- 取消变量的方法为“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;而如果变量存在且内容非空串,则不改变。
附录
- set:列出所有的变量及其内容
- declare:同set
- ulimit:与文件系统及程序的限制关系
学习bash——变量的更多相关文章
- Linux学习 - Bash变量
一.用户自定义变量(本地名) 用户自定义变量只有在当前的shell中生效 1 定义变量 name="zheng huiwei" aa=123 2 变量叠加 aa="$aa ...
- Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...
- linux学习18 shell脚本基础-bash变量和逻辑运行
一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...
- 第十一章、认识与学习BASH
第十一章.认识与学习 BASH 最近升级日期:2009/08/25 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 ...
- 第十一章、认识与学习 BASH
第十一章.认识与学习 BASH 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 shell 与 /etc/shel ...
- 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)
第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...
- linux bash变量作用域
linux bash变量作用域 一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的? shell会去$PATH环境变量定义的目录里去找这个命令.环境变量里一般包括/usr ...
- 认识与学习BASH①——鸟叔的Linux私房菜
文章目录 认识与学习BASH① 认识BASH 壳程序 多种shells Bash shell 的功能 type :查询指令是否为Bash shell 的内置指令 指令的换行输入和快速删除 Shell的 ...
- js学习之变量、作用域和内存问题
js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...
随机推荐
- UIlable上下居中
- (void)setView{ self.chooseImg = [[UIImageView alloc] initWithFrame:CGRectMake(TO_LEFT_D, (ROW_HEIG ...
- java面向对象编程思想的理解
1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...
- python排序算法的整理
#冒泡排序,主要思想:从第一个元素开始,向尾部开始比较大小换位置 def bubble_sort(alist): for j in range(len(alist)-1,0,-1): for i in ...
- Keras模型的保存方式
Keras模型的保存方式 在运行并且训练出一个模型后获得了模型的结构与许多参数,为了防止再次训练以及需要更好地去使用,我们需要保存当前状态 基本保存方式 h5 # 此处假设model为一个已经训练好的 ...
- win10家庭版升级为win10专业版
windows10 升级钥匙: DR9VN-GF3CR-RCWT2-H7TR8-82QGT 亲测可用
- Delphi方法重载
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- 3. 进程间通信IPC
一.概念 IPC: 1)在linux环境中的每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间是不能相互访问. 2)如果进程间要交换数据必须通过内核,在 ...
- 基于OMAPL:Linux3.3内核的编译
基于OMAPL:Linux3.3内核的编译 OMAPL对应3个版本的linux源代码,分别是:Linux-3.3.Linux-2.6.37.Linux2.6.33,这里的差距在于Linux2,缺少SY ...
- array_x
import java.util.*; public class array_x { public static void main(String args[]) { int a[][]={{2,4, ...
- win10在此处打开命令cmd
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令 ...