03-变量的定义

article/2025/10/12 10:21:44

一、变量的定义

1.变量是什么?

一句话概括:变量是用来临时保存数据的,该数据是可以变化的数据。

2.什么时候需要定义变量?

如果某个内容需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容。这样在修改内容的时候, 仅仅需要修改变量的值。在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用 这个变量。

3.变量如何定义?

变量名=变量值
变量名:用来临时保存数据的
变量值:就是临时的可变化的数据
在这里插入图片描述

4.变量的定义规则

序号规则
1区分大小写
2变量名不能有特殊符号
3变量名不能以数字开头
4等号两边不能有任何空格
5变量名尽量做到见名知意

5.变量的定义方式有哪些?

1)基本方式
直接赋值给一个变量

[root@MissHou ~]# A=1234567 [root@MissHou ~]# echo $A 1234567
[root@MissHou ~]# echo ${A:2:4}
3456

说明:
$变量名 和 $ {变量名} 的异同相同点:都可以调用变量
不同点:$ {变量名} 可以只截取变量的一部分,而 $变量名不可以

[root@localhost add]# B=`date +%F`
[root@localhost add]# echo $B
2021-08-03
[root@localhost add]# C=$(uname -r)
[root@localhost add]# echo $C
3.10.0-1160.el7.x86_64

二、交互式定义变量(read)

目的:让用户自己给变量赋值,比较灵活。
语法: read [选项] 变量名
常见选项:

选项释义
-p定义提示用户的信息
-n定义字符数(限制变量值的长度)
-s不显示(不显示用户输入的内容)
-t定义超时时间,默认单位为秒(限制用户输入变量值的超时时间)

用法一:用户自己定义变量值

[root@MissHou ~]# read nameharry
[root@MissHou ~]# echo $name 
harry
[root@MissHou ~]# read -p "Input your name:" name 
Input your name:tom
[root@MissHou ~]# echo $name 
tom

用法二:变量值来自文件

[root@MissHou ~]# cat 1.txt
10.1.1.1 255.255.255.0
[root@MissHou ~]# read ip mask < 1.txt 
[root@MissHou ~]# echo $ip
10.1.1.1
[root@MissHou ~]# echo $mask 
255.255.255.0

三、定义有类型的变量(declare)

目的:给变量做一些限制,固定变量的类型,比如:整型、只读
用法: declare 选项 变量名=变量值
常用选项:
在这里插入图片描述

[root@MissHou ~]# declare -i A=123 
[root@MissHou ~]# echo $A
123
[root@MissHou ~]# A=hello 
[root@MissHou ~]# echo $A 0[root@MissHou ~]# declare -r B=hello[root@MissHou ~]# echo $B
hello
[root@MissHou ~]# B=world
-bash: B: readonly variable 
[root@MissHou ~]# unset B
-bash: unset: B: cannot unset: readonly variable

四、变量的分类

1、本地变量

本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

2、环境变量

环境变量:当前进程有效,并且能够被子进程调用。

  • env 查看当前用户的环境变量
  • set 查询当前用户的所有变量(临时变量与环境变量)
  • export 变量名=变量值 或者 变量名=变量值;export 变量名
[root@MissHou ~]# export A=hello	临时将一个本地变量(临时变量)变成环境变量
[root@MissHou ~]# env|grep ^A A=hello

永久生效: vim /etc/profile
或 者 ~/.bashrc export A=hello
或者A=hello export A

说明:系统中有一个变量PATH,环境变量
export PATH=/usr/local/mysql/bin:$PATH

3、全局变量

  • 全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用.
  • 解读相关配置文件
    在这里插入图片描述说明:以上文件修改后,都需要重新source让其生效或者退出重新登录。

用户登录系统读取相关文件的顺序

  1. /etc/profile
  2. $HOME/.bash_profile
  3. $HOME/.bashrc
  4. /etc/bashrc
  5. $HOME/.bash_logout

4、系统变量

内置变量含义
$?上一条命令执行后返回的状态;状态值为0表示执行正常,非0表示执行异常或错误
$0当前执行的程序或脚本名
$#脚本后面接的参数的个数
$*脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开
$@脚本后面所有参数,参数是独立的,也是全部输出
$#1~$9脚本后面的位置参数,$1表示第1个位置参数,依次类推
${10} ~ ${n}扩展位置参数,第10个位置变量必须用{}大括号括起来(2位数字以上扩起来)
$$当前所在进程的进程号,如 echo $$
$!后台运行的最后一个进程号 (当前终端)
!$调用最后一条命令历史中的参数

五、简单四则运算

算术运算:默认情况下,shell就只能支持简单的整数运算
运算内容:加(+)、减(-)、乘(*)、除(/)、求余数(%)
1、四则运算符合

表达式举例
$(( ))echo $((1+1))
$[ ]echo $[10-5]
exprexpr 10 / 5
letn=1;let n+=1 等价于 let n=n+1

六、数组

1、数组的定义

  • 普通数组:只能使用整数作为数组索引(元素的下标)
  • 关联数组:可以使用字符串作为数组索引(元素的下标)

2、普通数组定义

  • 一次赋予一个

数组名[索引下标]=值
array[0]=v1
array[1]=v2
array[3]=v3

  • 一次赋予多个值

数组名=(值1 值2 值3 …)
array=(var1 var2 var3 var4)

array1=( `cat /etc/passwd`) --------------------将文件中每一行赋值给array1数组
array2=(`ls /root`)
array3=(harry amy jack “Miss Hou”)
array4=(1 2 3 4 “hello world” [10]=linux)

3、数组的读取

${数组名[元素下标]}

echo ${array[0]} -------获取数组里第一个元素
echo ${array[]} ------获取数组里的所有元素
echo ${#array[
]}-------获取数组里所有元素个数
echo ${!array[@]}-------获取数组元素的索引下标
echo ${array[@]:1:2}------访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素

查看普通数组信息:

  [root@MissHou ~]# declare -a

4、关联数组定义

1)首先申明关联数组

declare -A asso_array1
declare -A asso_array2
declare -A asso_array3

2 )数组赋值

  • 一次赋一个值

数组名[索引or下标]=变量值
asso_array1 [linux]=one
asso_array1 [java]=two
asso_array1 [php]=three

  • 一次赋多个值
 asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")
  • 查看关联数组
#declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou" )'
  • 获取关联数组值
# echo ${asso_array1[linux]} 
one
# echo ${asso_array1[php]} 
three
# echo ${asso_array1[*]} 
three two one
# echo ${!asso_array1[*]}
php java linux
# echo ${#asso_array1[*]}
3
# echo ${#asso_array2[*]}
4
# echo ${!asso_array2[*]}
name3 name2 name1 name4

http://chatgpt.dhexx.cn/article/Ob8q1Gde.shtml

相关文章

【论文阅读】ICRA2021: VDB-EDT An Efficient Euclidean Distance Transform Algorithm Based on VDB Data Struct

参考与前言 Summary: 浩哥推荐的一篇 无人机下的建图 and planning实验 Type: ICRA Year: 2021 论文链接&#xff1a;https://arxiv.org/abs/2105.04419 youtube presentation video&#xff1a;https://youtu.be/Bojh6ylYUOo 代码链接&#xff1a;https://github.com/zhud…

scipy.ndimage.distance_transform_edt 和 cv2.distanceTransform用法

scipy.ndimage.distance_transform_edt 和 cv2.distanceTransform 的作用都是计算一张图上每个前景像素点到背景的最近距离。 import cv2 import numpy as np from scipy.ndimage import distance_transform_edta np.array(([0, 1, 1, 1, 1],[0, 0, 1, 1, 1],[0, 1, 1, 1, 1]…

java edt,java并发之EDT测试

测试代码如下&#xff1a; 1、耗时计算没有单独起线程处理&#xff0c;耗时计算在EDT线程执行&#xff0c;导致界面没有响应&#xff0c;处于卡死状态 package thread; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent…

linux服务端修改EDT为东八区,EDT开发环境配置

1 安装条件 512MB内存或更高 Win XP/Win Vista/Win 7/RedHat Linux 32位或者64位操作系统(推荐32位) 安装IE7/8/9、FireFoxLatest Version、Chrome等浏览器中的一种 OracleJRE 1.6或更高版本 2 安装步骤 EDT 0.8.0已经发布发布。用户现在可以在http://www.eclipse.org/edt/#d…

修改linux系统的时间EDT为CST

问题&#xff1a; Centos 系统时间下午时间显示为12小时制 分析&#xff1a; 开始以为是要设置为24小时制 后来执行date命令发现是EDT&#xff0c;EDT 是北美东部夏令时间&#xff0c;比UTC落后4个小时 解决&#xff1a; # mv /etc/localtime /etc/localtime.bak # ln -s …

EDT技术 ug - 第四章节Creation of the EDT Logic (持续更新)

文章目录 Compression Analysisanalyze_compression Preparetion For EDT Logic CreationParameter Specification for the EDT LogicDual Compresson ConfigurationDefine Dual Compression ConfigurationsASYmmetric Input and Output ChannelsBypass Scan ChainsLatch-Based…

java edt,Java Swing 学问篇 - EDT

Java Swing 常识篇之EDT 从毕业到现在用SWING已经一年多&#xff0c;在这里想总结一下过去学到的东西和经验&#xff0c;和各位兄弟姐妹们一起分享。在以后的文章中也会和大家一起来分享一些好的框架。说起JAVA SWING&#xff0c;普遍给人的感觉是“丑、慢、难”&#xff0c;丑…

edt嵌入式确定性测试_CallSerially EDT和InvokeAndBlock(第1部分)

edt嵌入式确定性测试 我们上一次在2008年解释了EDT背后的一些概念&#xff0c;因此&#xff0c;我们很高兴再次撰写有关EDT的文章&#xff0c;在开发人员指南以及有关Udemy的课程中都有关于EDT的部分&#xff0c;但是由于这是最重要的了解在Codename One中&#xff0c;它几乎没…

EDT部署功能介绍

EDT部署功能介绍 当你在开发EDT Web前段程序的时候&#xff0c;你需要接触到EDT部署操作&#xff0c;从而将生成好的RUIHandler和Service的目标代码部署复制到目标Web程序中。和大家所熟知的部署到应用程序服务器上不同&#xff0c;EDT的部署操作是将生成好的Java/JavaScript/…

EDT技术 ug - 第一章节 Getting Start

文章目录 引言TestKompress Compression LogicEDT FlowEDT IP generationEDT synEDT IP pattern gennerationATPG 熟悉工具batch mode执行系统命令 本系列介绍的是Tessent的EDT&#xff08; Embedded Deterministic Testing&#xff09;技术。 参考为EDT tessent的 TestCompre…

DIY01_NE555叮咚门铃

文章目录 项目简介电路原理一、555定时器电路结构及工作原理二、叮咚门铃电路工作原理 原理图与PCB图一、原理图二、PCB图1. 初版2. 改进版 实物图立创打板流程经验总结 项目简介 第一次尝试自己DIY一个小电路设计&#xff0c;笔者选择了相对简单的NE555叮咚门铃。在本篇博客中…

NE555波形发生器手把手教程之NE555内部结构(一)

通过ne555搭建的波形发生器 可实现方波、三角波、正弦波输出 工程链接&#xff1a;https://pan.baidu.com/s/1T-9bdnO1IrWUsjmRTl12zQ 提取码&#xff1a;py66 一、芯片介绍 参数 供应电压&#xff1a;4.5-18V 供应电流&#xff1a;10-15mA 输出电流&#xff1a;225mA (m…

NE555基本原理及相关公式的推导

NE555基本原理及相关公式的推导 基本原理公式推导 基本原理 NE555主要由分压电路&#xff0c;电压比较器&#xff0c;RS触发器三部分组成&#xff1b; 分压电路电压比较器RS触发器提供电压比较器比较电压根据触发信号输出高低电平用于输出矩形波 当 V A > 2 3 V c c V_A&g…

模电学习12. NE555 方波信号发生器

模电学习12. NE555 方波信号发生器 一、NE555 基本功能1. 基本作用2. 基本组成 二、NE555方波生成电路1. 基本原理2. 原理图3. 仿真&#xff08;1&#xff09;RP1 设置为10%&#xff08;2&#xff09;RP1设置为90% 4. 实际电路 一、NE555 基本功能 1. 基本作用 NE555是一款广…

mysql profile 工具Neor Profile

一、下载Download - Neor Profile SQL http://www.profilesql.com/files/download/sqlprofiler-4.1.1.exe Neor Profile 这款免费的mysql 分析工具&#xff0c;这个工具类似于一个代理 本地启动一个mysql 代理服务&#xff0c;类似于MyCat 二、安装完成配置 三、代码连接代…

蓝桥杯NE555定时器与频率测量

使用的是蓝桥杯单片机CT107D实训平台&#xff1a; 555定时器内部&#xff0c;有3个5K的电阻分压。 NE555是一个纯硬件的设计&#xff0c;一旦电路确定了&#xff0c;其功能也就定了。 在蓝桥杯的板子上&#xff0c;555定时器是一个信号发生电路&#xff0c;通过定位器Rb3可改…

NE555的使用与理解

NE555 一款模拟与数字信号的集成芯片&#xff0c;通过一个电容充放电来输出方波&#xff0c;电容充放电的快慢决定了NE555输出的方波的频率&#xff0c;再通过控制两个电阻的比值来改变其输出方波的占空比。 外观图 内部图 因为NE555中有三个电阻R且都为5K所以称为555&#x…

蓝桥杯单片机设计与开发⑬ ---NE555模块

一、555定时器&频率测量 1. 电路原理 NE555是一种时钟芯片&#xff0c;输出一定频率的脉冲信号。就其模块特性&#xff0c;简单点来说&#xff0c;该模块会根据Rb3电位器的阻值&#xff0c;在SIG脚输出相应的频率的脉冲信号。 第十届竞赛中对该模块设置了考点&#xff0c;…