linux--shell--变量
1. 变量
bash中变量的值都是字符串
分类:
本地变量:当前shell有效
环境变量:在所有由登录进程产生的子进程有效
位置参数:只读,用于向shell脚本传递参数
2. 变量使用
2.1 变量替换、赋值
变量替换即引用变量的值
va1=123 va2=${va1}
值有空格则需要用双引号括起来。变量名和等号直接不能有空格、引用变量时大括号里不能有空格
变量赋值模式:
variable=value value赋值给变量variable
variable+value 对已赋值的变量,重设其值
variable?value、variable:?value 对未赋值的变量显示系统错误信息
variable:=value 对未赋值的变量,将value赋值给它
variable:-value 对未赋值的变量,将value赋值给它,但value不存储到变量对应的地址空间
#!/bin/bash a="123" unset a echo ${a:-"456"} #输出 456 echo ${a} #输出空行 unset a echo ${a:="789"} #输出 789 echo ${a} #输出 789
2.2 清除变量
unset 变量名
2.3 只读变量
设置为只读后,不能再更改其值
va1="3.14" readonly va1
3. 环境变量
3.1 查看进程环境变量
cat /proc/pid/environ | tr '\0' '\n'
env #查看当前进程环境变量
3.2 定义一个环境变量
MYPATH=XXX #先赋值
export MYPATH #声明为环境变量
3.3 重要环境变量
相关文件: .bash_profile 、.bashrc、.bash_logout
(1)PWD、OLDPWD
(2)PATH
增加新路径:/home/usr/bin
export PATH="${PATH}:/home/usr/bin"
或
PATH="${PATH}:/home/usr/bin" export PATH
(3)HOME
(4)SHELL、BASH
默认shell
(5)USER、UID
用户名、UID
(6)PPID
当前进程的父进程进程号
(7)PS1、PS2
提示符变量,用于设置提示符格式
(8)IFS
shell域分隔符,默认空格
(9)BASH_SUBSHELL
(10)BASH_VERSINFO
含6个元素,保存了bash的版本信息
#!/bin/bash for i in {0..5} do echo "BASH_VERSINFO[${i}]=${BASH_VERSINFO[${i}]}" done
BASH_VERSION :保存了BASH_VERSINFO的0到4的值
(11)DIRSTACK
目录栈栈顶
(12)GROUPS
当前用户所属群组
(13)
HOSTNAME:主机名
HOSTTYPE、MACHTYPE:硬件架构,同BASH_VERSINFO[5]
(14)REPLY
read读取的标准输入存储到表里时,若没有带变量名,则读到的标准输入存储到REPLY变量
对select命令(select循环),序号存储到REPLY变量
(15 )SECONDS
记录脚本从开始执行到结束消耗的时间,单位秒
(16) SHELLOPTS
(17)SHLVL
shell嵌套的层次
(18)TMOUT
设置shell的过期时间
4. 位置参数
表示命令行向shell脚本传递的参数
$*、$@ 表示全部参数
$0 脚本名字
${10} 第10个参数
$# 传递到脚本的参数数量
$$ 脚本运行的进程号
$? 命令的退出状态。0,没有错误 非0,有错误
5. 引用
(1)
将字符串用引用符号引起来,防止特殊字符被shell脚本解释为特殊意义。如$、*等有多个意义的字符。引用后特殊字符表现为字面意义
双引号"" 引用除 美元符$ 反引号` 反斜线\ 之外的所有字符
单引号'' 引用所有的字符
反引号`` shell将反引号中内容解释为系统命令
反斜线\ 转义符
双引号引用变量防止字符串分割,保留变量中的空格:
a="A B C" echo ${a} #输出A B C 丢失了空格 echo "${a}" #输出A B C 防止了字符串分割 echo '${a}' #单引号全引用,输出 ${a} 这样的字面字符串
(2)命令替换
将命令的标准输出作为值赋给变量
a=`pwd` b=$(pwd) #$() 的方式可以嵌套使用
命令替换返回有多行时,要若不引用命令替换结果,则换行符会被删除
a=`ls -l .` echo ${a} #输出无换行符,很杂乱 echo "${a}" #一个文件/目录一行显示
6. 有类型变量
declare、typeset(两个命令相同)
declare [option] name
选项:
-r 变量设置只读
-i 变量定义为整数
-a 变量定义为数组
-f 显示此脚本前定义过的所有函数名及其内容
-F 仅显示此脚本前定义过的所有函数名
-x 将变量声明为环境变量
7. 间接变量引用
8. 数学运算
(1)expr命令
(2)bc运算器