03-变量的定义

本文详细介绍了Shell脚本中变量的定义,包括变量的定义规则、交互式定义、有类型的变量声明,以及变量的分类如本地、环境、全局和系统变量。此外,还讨论了四则运算和数组的使用,包括普通数组和关联数组的定义、读取及其操作方法。

一、变量的定义

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 name
 harry
[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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值