当前位置:网站首页>Shell变量与赋值、变量运算、特殊变量、重定向与管渠
Shell变量与赋值、变量运算、特殊变量、重定向与管渠
2022-07-30 13:27:00 【Drw_Dcm】
目录
一、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
三、特殊变量
1.环境变量
环境变量指的是出于运行需要而由 Linux 系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。
环境变量的值由 Linux 系统自动维护,会随着用户状态的改变而改变。
2.PATH 变量
用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux 系统将在 PATH 变量指定的目录范围查找对应的可执行文件,如果找不到则会提示“command not found”。
3.只读变量
Shell 变量中有一种特殊情况,一经设定,其值是不可改变的,这种变量被称为只读变量。在创建变量的时候可将其设置为只读属性,也可以将已存在的变量设置为只读属性,只读变量主要用于变量值不允许被修改的情况,只读变量不可以改变值也不可以被删除。
4.位置变量
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示。
命令或脚本本身的名称使用“$0”表示。
5.预定义变量
预定义变量是由 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而 不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示。
$#:表示命令行中位置参数的个数
$*:表示所有位置参数的内容,这些内容当做一个整体
[email protected]:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常
$0:表示当前执行的脚本或程序的名称
$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号
四、重定向
用户通过操作系统处理信息的过程中,使用的几类交互设备文件
(1)标准输入(STDIN):默认的设备是键盘,文件编号为 0,命令将从标准输入文件中读取在执行过程中需要的输入数据。
(2)标准输出(STDOUT):默认的设备是显示器,文件编号为 1,命令将执行后的输出结果发送到标准输出文件。
(3)标准错误(STDERR):默认的设备是显示器,文件编号为 2,命令将执行期间的各种错误信息发送到标准错误文件。
1.重定向输出
重定向输出使用“>”或“>>”操作符号,分别用于覆盖或追加文件
若重定向输出的目标文件不存在,则会新建该文件,然后将前面命令的输出结果保存到该文件中;若目标文件已经存在,则将输出结果覆盖或追加到文件中。
>意思是当原来文件中有内容的话,原来的内容会被覆盖掉
>>意思是当原来文件中有内容的话,新加的内容会追加到里面而不会覆盖原来的内容
2.重定向输入
重定向输入指的是将命令中接收输入的途径由默认的键盘改为指定的文件,而不是等待从键盘输入。重定向输入使用“<”操作符。
通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成。
默认情况下,cat 命令会接受标准输入设备(键盘)的输入,并显示到控制台,但如果用文件代替键盘作为输入设备,那么该命令会以指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。
输入内容直到输入EOF,EOF之前的内容将会显示出来。
边栏推荐
- qq udp tcp机制
- Yilian: Activating the Value Potential of Data Elements and Unleashing the Innovation Dividend of SAS SSD
- 58. 最后一个单词的长度
- There is a risk of water ingress in the battery pack tray and there is a potential safety hazard. 52,928 Tang DMs are urgently recalled
- R语言向前或者向后移动时间序列数据(自定义滞后或者超前的期数):使用dplyr包中的lag函数将时间序列数据向后移动一天(设置参数n为负值)
- CF603E Pastoral Oddities
- What are the hard-core upgrades and applications that cannot be missed in Greenplum 6.0?
- 缓存
- cpu / CS 和 IP
- for循环的3个表达式执行顺序
猜你喜欢
There is a risk of water ingress in the battery pack tray and there is a potential safety hazard. 52,928 Tang DMs are urgently recalled
jsArray array copy method performance test 2207300040
如何判断自己是否适合IT行业?方法很简单
There is no one of the strongest kings in the surveillance world!
TaskDispatcher源码解析
重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
No-code development platform application visible permission setting introductory tutorial
创意loadingjs特效小点跳跃动画
Self-tuning PID self-tuning control 】 【
【ROS进阶篇】第十一讲 基于Gazebo和Rviz的机器人联合仿真(运动控制与传感器)
随机推荐
LeetCode二叉树系列——116.填充每个节点的下一个右侧指针
逻辑漏洞----权限类漏洞
R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化(平方、开平方、指数化等函数类似使用)
R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化箱图、width参数自定义箱图中箱体的宽度
第十四天笔记
There is a risk of water ingress in the battery pack tray and there is a potential safety hazard. 52,928 Tang DMs are urgently recalled
R语言ggpubr包的ggboxplot函数可视化分组箱图、自定义移除可视化图像的特定对象(移除可视化图像轴坐标轴的刻度线标签文本、both x and y axis ticks labels)
matlab画图,仅显示部分图例
(HR面试)最常见的面试问题和技巧性答复
Classic test interview questions set - logical reasoning questions
打破原则引入SQL,MongoDB到底想要干啥???
CF338E Optimize!
Yilian: Activating the Value Potential of Data Elements and Unleashing the Innovation Dividend of SAS SSD
Logic Vulnerability----Permission Vulnerability
ARC115F Migration
js背景切换时钟js特效代码
no matching host key type found. Their offer: ssh-rsa
学习笔记——七周成为数据分析师《第二周:业务》:业务分析指标
缓存一致性
判断链表是否有环