博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【shell】4 变量与数组
阅读量:2154 次
发布时间:2019-05-01

本文共 1809 字,大约阅读时间需要 6 分钟。

变量介绍

在计算机执行任务,有一些数据需要临时放在内存中(若放在硬盘中则需要额外的IO时间),以方便直接读出,这些数据可以改变,称为变量。

而这些数据都会在内存中的某个区域中,有其专属的内存空间地址,并与变量名绑定在一起

变量定义

赋值(分别为字符型 整型 浮点型赋值).赋值时不能有空格

name='ycy'age=22heigth=1.68

输出

echo $name

取消变量(如果变量在文件中 下次使用依然存在)

unset name #没有$符号

有类型变量 declare

-i 将变量看成整数

-r 使变量只读 readonly,该变量的值无法改变,并且不能为unset
-x 标记变量通过环境导出 export
-a 指定为索引数组(普通数组);查看普通数组
-A 指定为关联数组;查看关联数组

变量分类

本地变量

在当前脚本或当前终端,执行完失效

环境变量

在用户家目录下的.bashrc或.bash_profile文件中,用户私有变量,只能本用户使用。

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

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

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

全局变量

使用export命令将本地变量输出为当前shell中的环境变量

所有用户及shell都可以使用,可以在/etc/profile /etc/bashrc下永久定义

内置变量

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

$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错 若退出状态值为0,表示命令运行成功 若退出状态值为127,表示command not found 若退出状态值为126,表示找到了该命令但无法执行(权限不够) 若退出状态值为1&2,表示没有那个文件或目录 $$:当前所在进程的进程号     echo $$   eg:kill -9 `echo $$`  = exit   退出当前会话$!:后台运行的最后一个进程号  (当前终端)  # gedit &!$ 调用最后一条命令历史中的参数!! 调用最后一条命令历史$#:脚本后面接的参数的个数$*:脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开$@: 脚本后面所有参数,参数是独立的,也是全部输出$0:当前执行的进程/程序名  echo $0     $1~$9 位置参数变量${10}~${n} 扩展位置参数变量  第10个位置变量必须用{}大括号括起来./1.sh a b c[root@zutuanxue shell01]# cat 2.sh #!/bin/bash#xxxxecho "\$0 = $0"echo "\$# = $#"echo "\$* = $*"echo "\$@ = $@"echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$11 = ${11}" echo "\$12 = ${12}" 了解$*和$@的区别:$* :表示将变量看成一个整体$@ :表示变量是独立的#!/bin/bashfor i in "$@"doecho $idoneecho "======我是分割线======="for i in "$*"doecho $idone[root@zutuanxue shell01]# bash 3.sh a b cabc======我是分割线=======a b c

变量总结说明:

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

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

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

内置变量:shell本身已经固定好了它的名字和作用.

变量类型 作用域 生命周期
本地变量 当前shell环境(子shell不能用) 脚本结束或终端结束
环境变量 当前shell或者子shell 当前进程结束
全局变量 所有用户及shell环境 关机
内置变量 所有用户及shell环境 关机

 

参考:

 

 

数组

shell中数组可分为两类

普通数组:只能使用整数作为数组索引(元素的索引)

关联数组:可以使用字符串作为数组索引(元素的索引)

赋值以及读取语句如下

 

 

 

 

转载地址:http://pzxwb.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>