shell变量

shell变量之学习笔记

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

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

在这里插入图片描述

17 同时输出多行信息

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

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

在这里插入图片描述

18 比较符

-eq //equals等于
-ne //no equals不等于
-gt //greater than 大于
-lt //less than小于
-ge //greater equals大于等于
-le //less equals小于等于

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

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

相关文章

Spring Security—Servlet 应用架构

目录 一、Filter&#xff08;过滤器&#xff09;回顾 二、DelegatingFilterProxy 三、FilterChainProxy 四、SecurityFilterChain 五、Security Filter 六、打印出 Security Filter 七、添加自定义 Filter 到 Filter Chain 八、处理 Security 异常 九、保存认证之间的…

C语言【文件】

目录 概念 文件名 文件的打开和关闭 fopen fclose 输入输出函数 fputc fgetc fputs fgets fprintf fscanf fwrite fread 三种流 scanf和sprintf 结构体转化 ​编辑 文件的随机读写 fseek ftell rewind 文本文件和二进制文件 文件读取结束的判定 文件缓冲…

C++标准模板(STL)- 类型支持 (运行时类型识别,type_info )

运行时类型识别 定义于头文件 <typeinfo> 含有某个类型的信息&#xff0c;由实现生成。​​这是 typeid 运算符所返回的类。 std::type_info 定义于头文件 <typeinfo> class type_info; 类 type_info 保有一个类型的实现指定信息&#xff0c;包括类型的名称和…

【论文解读】Parameter-Efficient Transfer Learning for NLP

一. 介绍 1.1 为什么要引入Adapter 在存在许多下游任务的情况下&#xff0c;微调的参数效率很低:每个任务都需要一个全新的模型。作为替代方案&#xff0c;我们建议使用适配器模块进行传输。 1.2 论文目标 目标是建立一个在所有这些方面都表现良好的系统&#xff0c;但不需…

docker图形胡界面管理工具--Portainer可视化面板安装

1.安装运行Portainer docker run -d -p 8088:9000 \ > --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer--restartalways&#xff1a;Docker启动后容器自动启动 -p&#xff1a;端口映射 -v&#xff1a;路径映射2.通过…

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f;2、给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f;&#xff08;1&#xff09;用一个位图…

JAVA基础(JAVA SE)学习笔记(七)面向对象编程(进阶)

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第二阶段&#xff1a;Java面向对象编程 6.面向对象编程&#xff08;基础&#xff09; 7.面向对象编程&…

Ubuntu下 u2net tensorrt模型部署

TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…

nginx部署vue项目(访问路径加前缀)

nginx部署vue项目(访问路径加前缀) nginx部署vue项目&#xff0c;访问路径加前缀分为两部分&#xff1a; &#xff08;1&#xff09;修改vue项目&#xff1b; &#xff08;2&#xff09;修改nginx配置&#xff1b; vue项目修改 需注意&#xff0c;我这是vue-cli3配置&#x…

某验四代滑块验证码逆向分析

逆向目标 目标&#xff1a;某验四代滑块验证码&#xff0c;w 参数逆向主页&#xff1a;aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v加密算法&#xff1a;RSA、AES 通讯流程 验证码流程分析 进入网页后&#xff0c;打开开发者人员工具进行抓包&#xff0c;点击滑动拼图验证&#xff0c…

Vue3语法-双向绑定

点击加入精英计划可以加入 点击名字可以删除 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- vue.js --><script src"https://unpkg.com/vue3/dist/vue.glob…

微软正式发布开源应用平台 Radius平台

“ 10 月 18 日&#xff0c;微软 Azure 孵化团队正式发布开源应用平台 Radius&#xff0c;该平台将应用程序置于每个开发阶段的中心&#xff0c;重新定义应用程序的构建、管理与理解方式。” 简单的概括就是&#xff0c;它和Kubernetes不一样&#xff0c;Radius将应用程序放在每…

在Windows下Edge浏览器OA发起流程问题

在Edge浏览器中发起流程 如上图所示&#xff0c;不能正常打开Excel&#xff0c;自动将Excel表格转为了PDF 怎么处理&#xff1f;还得使用IE浏览器来访问&#xff0c;但打开IE后又自动跳转到Edge&#xff0c;根本就不给使用&#xff0c;在Edge下使用IE模式也解决不了这个问题。…

项目管理实战总结(二)-沟通路径

在一个大型的项目管理中&#xff0c;不同的沟通路径&#xff0c;会对整个事情的进展形成不同的影响。从项目管理的视角来看&#xff0c;该如何驱动项目有效进展&#xff0c;失之毫厘谬以千里。 沟通路径&#xff1a;调查问卷的推动事宜 在项目进行到了后期&#xff0c;甲方希…

JVM的几个面试重点

JVM的内存区域划分 JVM类加载机制 前言 Java程序最开始是一个 .java 的文件&#xff0c;JVM把它编译成 .closs 文件&#xff08;字节码文件&#xff09;&#xff0c;运行 Java 程序&#xff0c; JVM 就会读取 .class 文件&#xff0c;把文件内容读取到内存中&#xff0c;构造出…

YOLOv5:修改backbone为SPD-Conv

YOLOv5&#xff1a;修改backbone为SPD-Conv 前言前提条件相关介绍SPD-ConvYOLOv5修改backbone为SPD-Conv修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作&#xff0c;方便自己查阅。由于本人水平有限&#xff0c;难免出现错漏&#xff0c…

HammerDB的安装和使用(超详细)

目录 ​编辑 一、HammerDB的介绍 二、HammerDB的安装 1、下载hammerdb安装包 2、权限配置以及安装 3、查看安装目录 三、安装前的配置 1、启动监听 2、启动数据库 3、创建表空间 1.修改临时表空间 2…

【源码解析】Spring源码解读-bean的加载

Spring的整体流程其实就是通过配置 xml、注解将自定义bean类信息进行配置&#xff0c;然后通过BeanDefinitionReader读取配置信息&#xff0c;由Dom转换成xml解析成Docment。在通过加载的配置信息进行初始化Bean对象&#xff0c;然后在对象的前后进行处理&#xff0c;也就是不同…

面向对象【构造器】

文章目录 构造器定义构造器的作用构造器的使用说明无参构造器带参数的构造器构造器的重载使用构造器创建对象 总结 构造器定义 构造器是一种特殊类型的方法&#xff0c;它与类同名&#xff0c;没有返回值&#xff0c;并且用于在创建对象时执行初始化操作。构造器的名称必须与类…

java蓝桥杯前10题总结

文章目录 1.单词分析1.代码2.知识点 2.成绩统计1.代码2.知识点1.如何四舍五入&#xff1f;2.如何保留小数点后几位小数呢&#xff1f; 3.最短路4.回文日期1.代码2.知识点1.日期类2.字符串细节3.连等的细节 5.门牌制作1.代码 6.卡片1.代码2.细节 7.数字三角形1.代码2.细节 8.成绩…