bash的基础特性(4) 变量类型: 指的是变量中储存的数据类型,这个类型限定时是限定在变量之上的,而且一旦指定一个变量类型以后通常决定了以下几种结果,等等一些结果都在此处被限定了,这就是指定了变量类型的功用。 1、决定了数据储存的格式 2、储存空间的大小 3、参与运算的种类 变量类型主要有:字符型 数值型: 整数 浮点型 注意:整形和浮点型的储存格式和运算机制是不一样的,带一个小数点和不带一个小数点在cpu中所使用的运算单元和运算机制都是不同的。 除此之外,许多的程序编程语言还有其他类型,如日期时间等等,这些型号都是现有字符型和数值型的包装或转换或扩展。 很多程序语言都对变量进行类型限定,但有的严格有的宽松,所以编程语言又分为:强类型、弱类型 强类型:指的是在实现变量定义时,必须指定类型,参与运算必须符合类型要求,调用未声明的变量会报错。 弱类型:定义变量类型时,未必非得是变量类型,可以不指定,因为它把所有数据都当字符型储存,参与运算会自动进行隐式类型转换,也意味着变量无需事先定义,可直接调用。
bash中的变量类型 根据变量的生效范围等标准,bash中的变量可分为: 本地变量 局部变量 环境变量 位置变量 特殊变量
本地变量:指的是生效范围为当前shell进程,意味着本地变量在当前shell进程中定义的,当前shell终止就被自动撤销了,因此对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效。也包括当前shell进程的副shell,只要不是自己的就都无效,只对本shell生效。
环境变量:生效范围为当前shell进程及其子进程,在当前shell及其子shell都是有效的。
局部变量:是一个比本地变量限制更严格的变量,生效范围为当前shell进程中某代码片段。这个代码片段通常指的是函数上下文,这个函数创建时变量有效函数在生命周期变量有效,一旦函数调用结束,变量就被撤销。
位置变量:用$1、$2、……、来表示,用于让脚本在脚本代码中调用通过命令行传递给它的数据。
特殊变量:是bash内置的,用来保存特殊数据的,如:$?,$0,$*,$#,$@等等
本地变量
变量赋值的方式:
name(变量名)=“value(值)”
“=”是赋值符号表示把value表示的值储存到name所指定的内存空间中去
可以使用引用来实现赋值:
1、可以是直接字串
name=”username“
表示把username这个字符串赋值给name。
2、可以是变量引用
name=”$username“
加了一个$后表示不在赋值username这个字串,而是把username这个变量中的值赋值给name。
3、命令引用,可以把一个命令的执行结果赋值给当前变量
name=COMMAND
在赋值给name之前,COMMAND必须执行一下,把他的执行结果赋值给name,所以必须使用一个特殊符号:反引号
反引号就是键盘下那个波浪线下的符号,也可以这样使用:
name=$(COMMAND)
注意:命令引用引用的是一个命令的执行结果,而不是状态结果,是真正的执行结果。
引用状态结果的主要作用在于判断命令执行成功与否,而引用执行结果主要是用这个命令的执行结果的返回值。
注意:赋值时value可使用单引号和双引号,分别表示强引用和弱引用,而引用不光只有变量引用。
变量引用:调用一个变量中所储存的值 ${name}, $name 大多数情况下{}是可省的,变量名后面有一个容易让变量名混淆的字符,可以作为变量名存在的字符,那就必须加上{}。
显示已定义的所有变量:set
销毁变量:unset
注意:销毁的时候自能跟名字,不要加$。
环境变量: 无非就是变量声明和赋值,并且在声明时通常给一个初始值,直接就赋值好了。 用法: export name=VALUE declare -x name=VALUE 表示把一个变量导出为环境变量,一个事先定义成的本地变量,也可以随后导出。
显示所有环境变量: export (不带任何参数的export命令) env printenv 销毁变量: unset
变量命名法则: 1、不能使用程序中的保留字。 2、只能使用数字、字母及下划线,且不能以数字开头 3、尽量做到见名知意
如何让变量成为只读变量: readonly 变量名 declare -r 变量名
位置变量: 位置变量是不需要赋值的,只需要向命令行传递参数就可以了,位置变量主要实现让用户在脚本代码中调用通过命令行传递给脚本的参数,使得脚本能够接受外部的数据。 位置变量的实现机制: $1、$2、……:对应调用第一,第二等参数 $0: 调用命令本身 $*: 调用传递给脚本的所有参数 $@:调用传递给脚本的所有参数 $#:传递给脚本的参数的个数
$*和$@是有区别的:
$*:表示调用时把传递给这个脚本的所有参数当作一个字符串。
$@:是把传递给脚本的所有参数,每一个参数当一个独立的字符串。
位置变量还能做换岗操作: shift[n]:表示踢掉一个或多个传递的参数。
bash的配置文件 bash的配置文件分为以下几类 按生效范围划分: 全局配置: /etc/profile /etc/bashrc /etc/profile还有其他配置片段,就在: /etc/profile.d下的所有以.sh结尾的文件都是对应配置文件的组成部分 个人配置: ~/.bash_profile ~/.bashrc
按功能划分存在以下几类: profile类:为交互式登录的shell提供配置 bashrc类:为非交换生登录的shell提供配置
shell登录的类别: 交互式登录主要有两种: 1、直接通过终端输入密码账号登录 2、使用”su-username“登录的或使用”su-l username“切换
非交互式登录:
1、使用”su ussername“这种方案的
2、在图像界面下打开的终端
3、执行脚本
脚本运行起来以后,这个脚本会自己打开一个shell进程来单独运行脚本
profile类配置文件:
全局:/etc/profile
/etc/profile.d/.sh
个人:~/.bash_profile
对profile类而言,它的功用有:
1、用于定义环境变量
2、运行命令或脚本
bashrc类配置文件:
全局:/etc/bashrc
个人:~/.bashrc
功用:1、定义命令别名
2、定义本地变量
对于交互式登录的shell和非交互式登录的shell来讲,它们所读取的配置文件的数量和次序是不尽相同的
交互式登录shell会读取的顺序:
/etc/profile — /etc/profile.d/.sh — ~/.bash_profile — ~/.bashrc — /etc/bashrc
非交互式登录的shell读取次序:
~/.bashrc — /etc/bashrc — /etc/profile.d/*.sh
注意:如果说同一个变量配置在多个配置文件中都给出了,那么最终生效的是最后一个读取的,因为后面读取的会把前面读取的赋值修改。
注意:只有在配置文件中定义的才会永久生效,不会立即生效,只有重新读取配置文件才会生效,在命令行定义的会立即生效,但不会永久有效,而且只对当前shell进程和它的子进程有效。
编辑配置文件定义的新配置的生效方式: 1、重新启动shell进程 2、使用source或.命令进程