shell变量之学习笔记

news2024/11/18 21:23:49

shell变量之学习笔记

    • Shell变量概念
      • 1 shell变量分类:
      • 2 变量的赋值
      • 3 变量赋值格式:
      • 4 变量命名方式
      • 5 变量声明
      • 6 变量引用
      • 7 变量清除
      • 8 变量只读
      • 9 内部参数变量
      • 10 位置参数变量
      • 11 退出和返回状态
      • 12 命令替换
      • 13 read命令
      • 14 字符串长度与截取
      • 15 字符串替换
      • 16 变量的间接引用
      • 同时输出多行信息

Shell变量概念

变量用于保存有用信息,如路径名、文件名、数字等。Linux用户使用变量定制其工作环境,使系统获知用户相关配置。本质上是存储数据的一个或多个计算机内存地址。

1 shell变量分类:

用户自定义变量,由用户自己定义、修改、使用
环境变量path,这类变量由系统维护
位置参数变量,这类变量通过命令行给程序传递执行参数
内部参数变量,是bash预定义的特殊变量,用户不能修改

2 变量的赋值

变量的赋值变量是某个值的名称,引用变量称为变量替换,$是变量替换符号,如vars是变量名。
那么

$vars 就表示变量的值。

3 变量赋值格式:

vars=value
vars1=‘value key’
切记等号两边无空格,如果value中含空格,需要用引号括起来(没有空格括起来与不阔无区别)。

4 变量命名方式

大小写字符、数字、下划线等符号,变量名不能以数字开头

5 变量声明

使用变量前,首先要进行变量声明
shell变量为弱类型,不需要定义变量类型
变量声明与赋值格式:变量=值(等号两边不能有空格)

6 变量引用

KaTeX parse error: Expected 'EOF', got '#' at position 12: 变量名 #̲1个字符建议用,如a
KaTeX parse error: Expected 'EOF', got '#' at position 10: {变量名} #̲多于1个字符建议使用这种方式,…{abc}
echo $变量 #显示变量用echo

7 变量清除

变量不需使用时,用unast进行清除,
格式:unast 变量名

8 变量只读

变量设置为只读用readonly,任何用户不能对此变量进行重新赋值
格式: vars=value
readonly vars

[root@localhost tmp]# name=josh
[root@localhost tmp]# echo $name
josh
[root@localhost tmp]# readonly name
[root@localhost tmp]# unset name
-bash: unset: name: 无法反设定: 只读 variable
[root@localhost tmp]# name='jack'
-bash: name: 只读变量

可以看出,变量只读后,无法清除和重新赋值
在这里插入图片描述

9 内部参数变量

Shell内部参数变量是一组特殊的变量,它们由Shell自动设置和维护,用于存储有关Shell和正在运行的命令的信息。以下是一些常见的Shell内部参数变量及其用途:

内部参数变量与含义:
$0:保存当前脚本或命令的名称。
$#:保存传递给脚本或函数的位置参数的数量。
$@:保存所有传递给脚本或函数的位置参数的列表。
$*:保存所有传递给脚本或函数的位置参数的列表,作为一个单独的字符串。
与进程相关的内部参数与含义:
$$:保存当前Shell进程的进程ID(PID)。
$?:保存上一个命令的退出状态(返回值)。通常,0表示成功,非零值表示出现了错误。
$!:保存在后台运行的最后一个命令的PID。
$_表示在此之前执行的命令或脚本的最后一个参数

10 位置参数变量

$0	脚本名字
$1	第一个参数($2第二个,以此类推)

11 退出和返回状态

$? 	来实现返回状态
0	表示成功,其他均错误
1	执行失败
126 没有权限
127 命令没找到

0
在这里插入图片描述

1
在这里插入图片描述

126
在这里插入图片描述
127
在这里插入图片描述

12 命令替换

两个例子将sshd的进程数统计出来,赋予变量

sshdnum=`ps ef | grep sshd |wc -l`

在这里插入图片描述

sshd1um=$(ps -ef |grep sshd |wc -l)

在这里插入图片描述

13 read命令

read命令用来接收键盘输入内容为变量赋值

read [-p "信息"]  [var1 var2 ...]

read 操作一个变量
在这里插入图片描述
read操作多个变量
在这里插入图片描述
双引号“”:允许通过 引用其他变量值单引 号 ′ ′ :禁止引用其他变量值, 引用其他变量值 单引号'':禁止引用其他变量值, 引用其他变量值单引′′:禁止引用其他变量值,视为普通字符
反撇号··:将命令执行结果输出给变量

14 字符串长度与截取

使用${#string}来获取字符串的长度,其中string是你要测量长度的字符串。
在这里插入图片描述

使用${string:position:length}来截取字符串,其中string是原始字符串,position是截取的起始位置(从0开始计数),length是截取的字符数。
在这里插入图片描述

删除开头

echo ${josh#t}

删除结尾

echo ${josh%e}

在这里插入图片描述

15 字符串替换

[root@localhost tmp]# var="aaabcd opple mysqldba"
[root@localhost tmp]# echo ${var#a}		#删除第一次出现的a
aabcd opple mysqldba
[root@localhost tmp]# echo ${var/a/i}	#将第1次出现的a替换为i
iaabcd opple mysqldba
[root@localhost tmp]# echo ${var/#aa/i}	 #将第1、2次出现的a替换为i
iabcd opple mysqldba
[root@localhost tmp]# echo ${var//a/i}		#将所有a替换为i
iiibcd opple mysqldbi
[root@localhost tmp]# echo ${var/%a/x}    	#在行尾添加一个x
aaabcd opple mysqldbx

在这里插入图片描述

16 变量的间接引用

将str1赋值给str2,通过间接引用变量,实现变量值的替换

[root@localhost tmp]# str1="Hello world"
[root@localhost tmp]# str2=str1
[root@localhost tmp]# echo $str2
str1
[root@localhost tmp]# echo ${!str2}
Hello world
[root@localhost tmp]# eval echo \$$str2
Hello world

在这里插入图片描述

同时输出多行信息

echo命令输出多行信息,多行中间不能出现双引号,否则会提前结束,或者使用转义\

[root@localhost tmp]# echo "           
line1
line2
line3
"

line1
line2
line3

cat输出多行,多行中不能出现END开始的行,否则提前结束
[root@localhost tmp]# cat <<END
line1
line2
line3
END
line1
line2
line3

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FL studio21永久激活码 附带一键下载安装包

玩音乐的朋友&#xff0c;对FL studio肯定不陌生&#xff0c;目前最新的版本是FL studio21&#xff0c;这是一款非常强大且专业的音频制作软件&#xff0c;而且还可以编曲、剪辑、录音、混音等等之类的创作操作&#xff0c;使你的计算机成为一个全功能录音室。下面小编就来和大…

15.Tensor Product vs. Kronecker Product

此处是为澄清她两的区别&#xff0c; 这两个事物 都用的相同的符号表示&#xff0c; 即这个圈数符号&#xff0c; 它在数学中有许多不同的含义&#xff0c; 本文讨论的是&#xff1a;“张量积”&#xff0c;它是对张量的运算&#xff1b; 以及“Kronecker ”积&#xff0c;…

C#WPFPrism框架模块化应用实例

本文实例演示C#WPFPrism框架模块化应用实例。 首先创建WPF项目,修改App相关文件内容,以便使用prism。 一、添加模块 解决方案中添加ModuleA和ModuleB两个项目 删除不用的窗体,添加自定义窗体 修改ModuleA和ModuleB的输出类型

最近又火了!吴恩达《生成式 AI》重磅发布!

吴恩达教授可能是许多人接触 AI 的启蒙课导师吧&#xff0c;在过去的十多年中&#xff0c;他的《Machine Learning》课程已经对数百万的学习者产生了积极影响。 而随着 ChatGPT 的推出&#xff0c;大模型和各类生成式人工智能&#xff08;GenAI&#xff09;技术在行业内外备受…

激活WinEdt 11.1

激活WinEdt 11.1 打开WinEdt 11.1&#xff0c;点击help 点击Register WinEdtname输入&#xff1a;*60[20220501] Warez_Down [RU-BOARD] (100 users)Code输入&#xff1a;4049089118892183088 即可激活。 参考文章https://blog.csdn.net/j_l_sheng/article/details/125456662

内存的基础知识

一、概述 1.内存&#xff1a; 存放数据&#xff0c;为了缓和CPU与硬盘之间的速度差异&#xff0c;程序执行前会先放入内存中再让CPU处理。 由存储单元(存放数据的最小单元&#xff0c;每个单元都会对应一个地址)构成 2.常用数量单位&#xff1a; 1K(千)2的10次方 1M(兆)2的20次…

基于springboot实现藏区特产销售平台项目【项目源码+论文说明】计算机毕业设计

基于springboot实现藏区特产销售平台演示 摘要 “互联网”的战略实施后&#xff0c;很多行业的信息化水平都有了很大的提升。但是目前很多藏区特产销售信息仍是通过人工管理的方式进行&#xff0c;需要在各个岗位投入大量的人力进行很多重复性工作&#xff0c;使得对人力物力造…

Python Django教程之实现待办事项应用程序

Django是一个基于Python Web框架的高级Web框架&#xff0c;允许快速开发和干净&#xff0c;务实的设计。本文将创建一个待办事项应用程序&#xff0c;以了解Django的基础知识&#xff0c;感兴趣的可以尝试一下。今天&#xff0c;我们将创建一个待办事项应用程序&#xff0c;以了…

基于springboot实现4S店车辆管理系统项目【项目源码+论文说明】

基于springboot实现4S店车辆管理系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&am…

leetcode 105. 从前序与中序遍历序列构造二叉树

2023.10.21 本题需要根据前序遍历序列和中序遍历序列来构造出一颗二叉树。类似于从中序与后序遍历序列构造二叉树 。使用递归&#xff0c; java代码如下&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

建筑模板价格多少钱一张?

建筑模板是建筑施工中常用的一种材料&#xff0c;它的价格对于建筑行业来说非常重要。根据搜索结果&#xff0c;以下是关于建筑模板价格的具体信息&#xff1a; 1. 建筑模板尺寸和价格&#xff1a; - 常见的建筑模板尺寸有两种&#xff1a;2440mm 1220mm和1830mm 915mm - 一般…

个人微信号管理工具哪个好?

先来看看微信个人号管理工具的应用场景和功能。 下面主要从微信个人号管理工具中我觉得比较好用的功能进行讲解&#xff1a; 1加粉功能 私域流量池搭建第一步&#xff0c;导入用户。 导入数据&#xff08;微信号或手机号&#xff09;&#xff0c;设置加人任务&#xff0c;每天会…

OpenCV中world模块介绍

OpenCV中有很多模块&#xff0c;模块间保持最小的依赖关系&#xff0c;用户可以根据自己的实际需要链接相关的库&#xff0c;而不需链接所有的库&#xff0c;这样在最终交付应用程序时可以减少总库的大小。但如果需要依赖OpenCV的库太多,有时会带来不方便&#xff0c;此时可以使…

SLAM进阶(九)---- cannot open shared object file问题

1 为什么会遇到这个问题 我们在 2 查看问题所在 我的项目依赖于VTK 7.1.1&#xff0c;PCL 1.9.1。项目可以完成编译&#xff0c;但是不能执行。即使用动态库编译链接stereo_inertial_tum_vi_old.cc后&#xff0c;得到名为stereo_inertial_tum_vi_old的可执行程序。但是在运行st…

哪些企业适合做私域?私欲怎么做成效大?

什么是私欲 简单直白来说&#xff0c;就是不用花钱就可以触达客户的渠道。私域流量就是私人的流量&#xff08;不用花钱&#xff09;。 哪些企业适合做私域&#xff1f; 》复购率高 比如美妆护肤产品行业、餐饮等快消品行业。 可通过群发推广消息、朋友圈营销和在社群里不断进…

Breach 1.0 靶机

Breach 1.0 环境配置 设置 VMware 上的仅主机模式网卡&#xff0c;勾选 DHCP 自动分配 IP&#xff0c;将子网改为 192.168.110.0/24 将靶机和 kali 连接到仅主机网卡 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 Initech被入侵&#xff0c;董事会投票决定引入…

二、UI入门

1. QWidget类 QWidget类是Qt所有图形用户界面&#xff08;组件&#xff09;的基类&#xff0c;因此QWidget类内部规定了所有最基础的UI相关功能。例如以下成员&#xff1a; ● width : const int 宽度&#xff08;单位&#xff1a;像素&#xff0c;后文同&#xff09; Qt中的…

基于SegFormer的改进语义分割该网络

摘要 场景解析是无人驾驶领域的一个关键任务&#xff0c;但是传统的语义分割网络往往只关注于提取更深层次的图像语义信息而忽略了全局信息对图像分割任务的重要性。另外随着图像在深层次卷积网络中的传递&#xff0c;卷积核天然的滤波作用会使得图像的边缘趋于平滑而丢失细节特…

2015年408真题复盘

紫色标记是认为有一定的思维难度或重点总结 红色标记是这次刷真题做错的 记录自己对题目的一些想法与联系&#xff0c;可能并不太关注题目本身。 分数用时 选择部分10/21 78/8036min大题部分总分 摘自知乎老哥&#xff1a;“我做历年真题时&#xff0c;绝大部分是130~139&#…

LVS负载均衡集群 (NAT模式)

LVS集群 集群的概念&#xff1a; 为解决某个特定的问题&#xff0c;将多个计算机组合起来形成一个单个系统 集群的水平扩展&#xff1a; 增加设备&#xff0c;并行运行多个服务&#xff0c;通过网路连接和算法来调度服务分配的问题 集群的类型&#xff1a; 负载均衡集群&#…