前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是Shell的变量和数组?如何定义与使用?

什么是Shell的变量和数组?如何定义与使用?

原创
作者头像
reload
修改2024-08-02 21:18:41
1210
修改2024-08-02 21:18:41
举报
文章被收录于专栏:Linux运维

大家好呀!今天简单介绍一下Shell基础,包括变量、数组以及四则运算等方面内容。

1、变量

1.1 变量分类

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

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

env:查看当前用户的环境变量

set:查询当前用户的所有变量(临时变量与环境变量)

export:将当前变量变成环境变量

代码语言:powershell
复制
# 临时将一个本地变量(临时变量)变成环境变量
export A=hello	
env|grep ^A

# 永久生效:
vim /etc/profile 或者 ~/.bashrc
# 系统中有一个变量PATH,即环境变量

3)全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用。

代码语言:powershell
复制
$HOME/.bashrc #当前用户的bash信息(aliase、umask等)
$HOME/.bash_profile #当前用户的环境变量
$HOME/.bash_logout #每个用户退出当前shell时最后读取的文件

/etc/bashrc             #使用bash shell用户全局变量
grep --color=auto
umask

/etc/profile   		   #系统和每个用户的环境变量信息

mycat_home=/usr/local/mycat/bin
export mycat_home
# 执行mycat命令
mycat

source /etc/bashrc

注:用户登录系统读取相关文件的顺序:/etc/profile——>$HOME/.bash_profile——>$HOME/.bashrc——>/etc/bashrc——>$HOME/.bash_logout

4)系统变量 : 即内置bash中的变量,shell本身已经固定好了它的名字和作用。

代码语言:powershell
复制
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
 若退出状态值为0,表示命令运行成功
 若退出状态值为127,表示command not found
 若退出状态值为126,表示找到了该命令但无法执行(权限不够)
 若退出状态值为1&2,表示没有那个文件或目录
 
$$:当前所在进程的进程号     echo $$   eg:kill -9 `echo $$`  = exit   退出当前会话
$!:后台运行的最后一个进程号  (当前终端)
!$:调用最后一条命令历史中的参数
!!:调用最后一条命令历史


$#:脚本后面接的参数的个数
$*:脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开
$@: 脚本后面所有参数,参数是独立的,也是全部输出

$0:当前执行的进程/程序名  echo $0	    
$1~$9 位置参数变量
${10}~${n} 扩展位置参数变量  第10个位置变量必须用{}大括号括起来

注:$* 表示将变量看成一个整体$@ 表示变量是独立的

1.2 变量定义规则

1)默认情况下,shell里定义的变量是不分类型的,可以给变量赋予任何类型的值;等号两边不能有空格,对于有空格的字符串做为赋值时,要用引号引起来(变量名=变量值)

2)变量的获取方式: $变量名${变量名} ($符表示调用变量)

如果是获取变量的全部,两个都可以;如果是获取变量的某一部分,用${} 。eg:echo ${a:2:3},表示从变量a的第3个字符开始,往后连续获取三个字符。

3)取消变量(unset):unset 变量名

4)变量名区分大小写,变量名可以是字母数字下划线,但不能以数字开头避免使用特殊字符和Shell关键字

1.3 有类型变量

使用declare声明类型,常见如下:

-i:定义整数变量

-r:定义只读变量 readonly

-x:标记变量通过环境导出 export

-a:指定为索引数组(普通数组);查看普通数组

-A:指定为关联数组;查看关联数组

2、数组

1)普通数组:只能使用整数作为数组索引(下标)

2)关联数组:可以使用字符串作为数组索引(下标)

2.1 数组定义

普通数组定义:用括号来表示数组,数组元素(变量)用“空格”符号分割开。定义数组的形式为如下。

1)使用索引定义数组

一次赋一个值

代码语言:powershell
复制
# 变量名[索引]=变量值
array[0]=v1
array[1]=v2
array[3]=v3

2)用括号表示,元素之间用"空格"分隔

一次赋多个值

代码语言:powershell
复制
array=(var1 var2 var3 var4)

查看普通数组:declare -a

2.2 获取

以数组array为例。

${array[i]}:i为元素下标,使用@ 或 * 可获取数组中的所有元素

1)获取第一个元素(下标为0)

代码语言:powershell
复制
echo ${array[0]}

2)获取所有元素(*或@)

代码语言:powershell
复制
echo ${array[*]}	
# 或
echo ${array[@]}

3)获取元素个数(#)

代码语言:powershell
复制
echo ${#array[*]}	

4)获取索引下标(!)

代码语言:powershell
复制
echo ${!array[@]}    	

5)访问指定的元素

${array[*]:起始下标:结束下标}

代码语言:powershell
复制
echo ${array[@]:1:2}    

3、关联数组

3.1 声明

declare -A 数组名

代码语言:powereshell
复制
declare -A books

3.2 赋值

1)一次赋一个值(下标定义):

数组名[索引]=变量值

代码语言:powereshell
复制
books[linux]=3
books[python]=2
books[java]=1

2)一次赋多个值(括号定义):

代码语言:powereshell
复制
names=([name1]=Bob [name2]=Jack [name3]=Lucy)

4、交互式定义变量的值

使用read命令,作用:可以让用户去定义变量值

代码语言:powereshell
复制
-p:提示信息
-n:字符数 (限制变量值的字符数)
-s:不显示   
-t:超时,限制用户输入变量值的超时时间,默认单位秒

注:变量名字前要用空格隔开

5、其他变量

5.1 dirname & basename

作用:取出目录下的目录和文件。dirname取目录,basename取文件。

5.2 变量"内容"的删除 & 替换

注意左右方向

代码语言:powereshell
复制
1个“%”代表从右往左去掉一个/key/
2个“%%”代表从右往左最大去掉/key/
1个“#”代表从左往右去掉一个/key/
2个“##”代表从左往右最大去掉/key/

6、简单的四则运算

默认情况下,shell只支持简单的整数运算,如+、-、*、/、%(取模,求余数)

Bash shell 的四种算术运算方式:

1)使用$(( ))

2)使用$[ ]

3)使用expr 外部程式,注意要空格。

4)使用let 命令

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、变量
    • 1.1 变量分类
      • 1.2 变量定义规则
        • 1.3 有类型变量
        • 2、数组
          • 2.1 数组定义
            • 2.2 获取
            • 3、关联数组
              • 3.1 声明
                • 3.2 赋值
                • 4、交互式定义变量的值
                • 5、其他变量
                  • 5.1 dirname & basename
                    • 5.2 变量"内容"的删除 & 替换
                    • 6、简单的四则运算
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档