shell的变量与引用
- 变量的类型
- shell变量的命名规则
- shell中的三种引号
- 定义变量
- 使用变量
- 删除变量
- 变量的作用域(使用范围)
- 系统变量
- 环境变量
1.shell是动态、弱类型语言
2.shell中变量不分数据类型,统一按字符串存储
3.运行shell时,程序中同时会存在四种变量:局部变量、全局变量、环境变量、系统变量
变量的类型
变量类型确定时间
1.静态类型语言 在程序编译期间确定变量类型的语言。
2.动态类型语言 在程序执行过程中才确定变量的数据类型的语言
是否强制要求类型定义
1.强类型语言
2.弱类型语言
shell变量的命名规则
变量名的命名须遵循如下规则:
1.数字、字母、下划线组成;数字不能开头
2.中间不能有空格
3.不能使用标点符号
4.不能使用bash里的关键字(可用help命令查看保留关键字)
5。Shell中变量名大小写敏感
shell中的三种引号
==双引号中 $ \ ’ " 四种字符有特殊意义 ==
单引号 单引号括起来的字符均表现为普通字符。
双引号 双引号括起来的字符均表现为普通字符,除了 $ \ ' " 这四个字符有特殊意义。
反引号 反引号括起来的字符被shell解释为命令并执行,以其结果取代整体。
定义变量
注意:定义变量时,变量名和等号之间不能有空格
方法一:直接定义并使用
value_name='matthew' #直接定义了变量value_name 其值为 'matthew'
方法二:使用declare或者typeset定义
为了更好控制相关属性bash提供了declare命令(typeset)
格式:declare attribute variable
-p 显示所有变量的值
-i 定义变量为整数
-r 设置为只读
-a 设置为数组
-f 显示所有自定义函数(函数名+函数体)
-x 设置为环境变量
例如:declare -r value_name='matthew' #定义了一个只读变量 value_name其值为'matthew'
方法三:只读变量定义
使用 readonly 命令将变量定义为只读变量,只读变量的值不能被改变
myUrl="http://www.google.com"
readonly myUrl
使用变量
推荐使用时用{}把变量括起来
语法格式:${var}
1.只要在变量名前面加美元符号即可
2.变量名外面的花括号是可选的,加花括号是为了帮助解释器识别变量的边界
删除变量
语法格式:unset variable_name
1.变量被删除后不能再次使用。
2.unset 命令不能删除只读变量。
变量的作用域(使用范围)
注意:函数内部的局部变量会屏蔽同名全局变量。就近原则
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
全局变量
1.脚本中定义的变量
2.函数中定义的变量
局部变量
1.函数的参数是局部变量。
2.函数内部通过local关键字定义局部变量
系统变量
shell语言系统变量主要在对参数判断和命令返回值判断时使用。
$n n从1开始;表示参数位置
$# 命令行参数个数
$0 当前shell脚本的名称
$? 前一个命令或者函数的返回状态码
$* 返回所有参数 一个字符串形式 "var1 var2 var3 ..."
$@ 返回所有参数 多个字符串形式 "var1" "var2" ...
$$ 返回本进程的进程ID
环境变量
1.所有的程序,包括shell启动的程序,都能访问环境变量。必要的时候shell脚本也可以定义环境变量
2.使用env命令可以直接查看所有的环境变量
Shell程序运行时都会默认接收一组变量,即环境变量。
PATH 命令搜索路径以:分割
HOME 用户主目录路径名
COLUMNS 定义了命令编辑模式下可使用命令行的长度
HISTFILE 命令历史文件
HISTSIZE 命令历史文件最多可包含的条数
HISTFILESIZE 命令历史文件包含的最大行数
SHELL shell的全路径名
PWD 当前工作目录
LOGNAME 当前登录名
IFS 定义shell使用的分隔符
TERM 终端类型
TMOUT shell自动退出时间,单位秒,若设置为0则禁止shell自动退出
自我学习总结,路过大牛请多多指导