当前位置:网站首页>Shell变量与赋值、变量运算、特殊变量
Shell变量与赋值、变量运算、特殊变量
2022-07-31 01:08:00 【怕失眠】
目录
一、shell变量及赋值
1.shell的变量
变量是用来临时保存数据的,并且该数据时可以变化的,任何一个语言都离不开变量,如果某个内容需要多次使用并且会重复出现,需要使用变量,需要修改可直接修改变量。
常见 Shell 变量的类型包括自定义变量、环境变量、只读变量、位置变量、预定义变量
2.自定义变量
(1)变量的定义
Bash中的变量操作相对比较简单,在定义一个新的变量时,不需要提前进行声明,直接指定变量名称并赋给初始值(内容)即可。
格式:变量名=变量值
变量名:临时存放数据的地方
变量值:临时的可变化的数据
等号:表示赋值关系
等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、-、*、/、.、?、%、&、#等)
(2)用echo查看和引用变量的值
通过在变量名称前添加前导符号“$”,可以引用一个变量的值,使用 echo 命令可以查看变量,可以在一条 echo 命令中同时查看多个变量值
当变量名称容易和后面的其他字符相混淆时,需要用大括号“{}”将其括起来,否则将无法确定正确的变量名称。对于未定义的变量,将显示为空值
(3)echo选项
echo -n 表示不换行输出
使用echo -e输出转义字符
转义字符:
\c 不换行输出,在”\c”后面不存在字符的情况下,作用相当于echo -n
\n 换行
\t 转义后表示插入tab,即制表符
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变 量引用
4)取消定义
unset 变量名
(5)特殊操作
还有一些特殊的赋值操作,可以更灵活地为变量赋值,以便适用于各种复杂的管理任务
(6)双引号(”)
双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来;其他情况下双引号通常可以省略
1)当内容中有空格
2)当以变量的值进行赋值
(7)单引号(‘)
1)当要赋值的内容中包含$、“、\等具有特殊含义的字符时,应使用单引号括起来。
2)在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。
3)但赋值内容中包含单引号(‘)时,需使用\’符号进行转义,以免冲突。
(8)反撇号(`)
1)反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。
2)反撇号括起来的范围内必须是能够执行的命令行,否则将会出错
3)使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用 “$()”来代替反撇号操作,以解决嵌套的问题。
2.交互式定义变量
(1)read 命令
1)除了上述赋值操作以外,还可以使用 Bash 的内置命令 read 来给变量赋值。
2)用来提示用户输入信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入 一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给 最后一个变量)。若指定的变量只有一个,则将整行内容赋值给此变量。
3)为了使交互式操作的界面提高易用性,read 命令可以结合“-p”选项来设置提示信息
(2)交互式定义变量(read)
-p 提示用户的信息
-n 定义字符数
-s 不显示用户输入的内容,常用于输入密码
-t 定义超时时间,超过多长时间没输自动退出
3.变量的作用范围
默认情况下,新定义的变量只在当前的 Shell 环境中有效,因此称为局部变量,当进入子程序或新的子 Shell 环境时,局部变量将无法再使用
export命令
为了使用户定义的变量在所有的子 Shell 环境中能够继续使用,减少重复设置工作,可以通过内部命令 export 将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无须使用“$”符号),变量名之间以空格分隔。
使用 export 导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值了。
二、变量运算
1.数值变量的运算及特殊变量
(1)在 Bash Shell 环境中,只能进行简单的整数运算,不支持小数运算
(2)整数值的运算主要通过内部命令 expr 进行
(3)运算符与变量之间必须有至少一个空格。
(4)运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)
(5)运算符号:$(()) 和$[]
(6)运算命令:expr和let
(7)运算工具:bc(系统自带)
2.expr命令
常用的 几种运算符如下所述。
+:加法运算。
-:减法运算。
\*:乘法运算,注意不能仅使用“*”符号,否则将被当成文件通配符。
/:除法运算。
%:求模运算,又称为取余运算,用来计算数值相除后的余数。
(1)$[]和$(()) 必须要和echo在一起用因为他只能运算无法输出结果
(2)$[]整数运算
(3)$[]变量的运算,可省略[]里的$
3.let
let的运算可以改变变量本身的值,但不显示结果,需要echo,其他的运算方式可以做运算但不改变变量本身的值
4.bc
使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用。
布尔值:真(true) 或 假(false) 成立或不成立
bc还可以做逻辑运算,真为1,假为0
2.PATH 变量
用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux 系统将在 PATH 变量指定的目录范围查找对应的可执行文件,如果找不到则会提示“command not found”。
3.只读变量
Shell 变量中有一种特殊情况,一经设定,其值是不可改变的,这种变量被称为只读变量。在创建变量的时候可将其设置为只读属性,也可以将已存在的变量设置为只读属性,只读变量主要用于变量值不允许被修改的情况,只读变量不可以改变值也不可以被删除。
4.位置变量
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示。
命令或脚本本身的名称使用“$0”表示。
5.预定义变量
预定义变量是由 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而 不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示。
$#:表示命令行中位置参数的个数
$*:表示所有位置参数的内容,这些内容当做一个整体
[email protected]:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常
$0:表示当前执行的脚本或程序的名称
$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号
边栏推荐
- 使用PageHelper实现分页查询(详细)
- typescript13-类型别名
- 响应式布局与px/em/rem的比对
- Detailed explanation of 9 common reasons for MySQL index failure
- typescript15-(同时指定参数和返回值类型)
- Image processing tool design
- 【网络安全】文件上传靶场通关(1-11关)
- 射频器件的基本参数2
- [C language course design] C language campus card management system
- Distributed. Distributed lock
猜你喜欢
ShardingSphere read-write separation (8)
小黑leetcode之旅:117. 填充每个节点的下一个右侧节点指针 II
typescript18-对象类型
typescript13-类型别名
数字图像隐写术之卡方分布
VS warning LNK4099:未找到 PDB 的解决方案
The level of ShardingSphere depots in actual combat (4)
Typescript18 - object type
MySQL——数据库的查,增,删
Mysql systemized JOIN operation example analysis
随机推荐
API 网关 APISIX 在Google Cloud T2A 和 T2D 的性能测试
Mini Program - Global Data Sharing
Detailed explanation of 9 common reasons for MySQL index failure
DOM系列之scroll系列
【952. Calculate the maximum component size according to the common factor】
ShardingSphere之水平分库实战(四)
软件测试工作3年了,谈谈我是如何从刚入门进阶到自动化测试的?
《实战》基于情感词典的文本情感分析与LDA主题分析
297. 二叉树的序列化与反序列化
The difference between 4G communication module CAT1 and CAT4
手把手教你配置Jenkins自动化邮件通知
场景之多数据源查询及数据下载问题
孩子的编程启蒙好伙伴,自己动手打造小世界,长毛象教育AI百变编程积木套件上手
基于Keras_bert模型的Bert使用与字词预测
深度学习可以求解特定函数的参数么?
DOM系列之 offset 系列
Huawei's "genius boy" Zhihui Jun has made a new work, creating a "customized" smart keyboard from scratch
蓝牙mesh系统开发三 Ble Mesh 配网器 Provisioner
MySql data recovery method personal summary
TiCDC 架构和数据同步链路解析