Shell变量
一)全局环境变量
全局变量对于定义它的shell和其子shell都是可见的,但如果生成它的shell被终止,全局变量也就消失了。另外全局变量会被子shell的同名变量覆盖。
#定义一个全局变量
export a="I want break free"
#或者
b="Sunday Morning"
export b
#删除一个全局变量
unset a
二)局部环境变量
局部环境变量只能在定义它们的进程中可见。
#注意变量名、等号、和值之间是没有空格的
c="Live Forever"
unset c
区别全局环境变量和局部环境变量其实我们只需要记住:全局环境变量作用范围多了个字shell而已。
另外关于脚本中的变量,按局部变量方式定义的在整个其范围是整个脚本文件,包括你在方法中定义的变量。要产生一个"块级作用域"的变量需要在变量定义时加上local
local d="Lucy in the sky"
三)变量的持久化
Linux下所有用户要使用的环境变量:
方案一:将变量放入/etc/profile当中--------致命缺陷:如果升级Linux系统/etc/profile文件会被更新,设置的变量不复存在。
方案二:在/etc/profile.d目录中创建一个以.sh结尾的文件,写入变量。推荐此方法。
个人用户要使用的环境变量:
放入:~/.bashrc文件
四)数组变量
#定义
array=(one tow three four)
#使用
echo ${array[]}
#three
echo ${array[*]}
#one tow three four
#删除
unset array[]
unset array[*]
五)特殊变量
1)位置参数变量
$0--------------------------------可获取当前脚本文件名,如果执行脚本时包含路径,得到的值时路径
$n---------------------------------n为数字,当n超过9时必须采用${10}形式。获取执行脚本的第n个参数
$#--------------------------------当前执行的Shell所接参数个数
$*---------------------------------获取当前脚本的所有参数,交双引号时相当于"$1 $2 $3"
$@-------------------------------不加引号时功能和不加引号的$*一样,加引号时等同于 "$1" "$2" "$3"
2)进程中的特殊状态变量
$?--------------------------------可获取上个指令执行后的返回值
$$--------------------------------执行shell脚本的进程号
六)变量的处理
1.系统内置命令
1)echo:在屏幕上输出变量 命令格式 echo args 其中arges可以是变量和字符串组合
2)eval:
命令格式:eval args
功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令。
3)exec:
命令格式: exec 命令参数
功能:在不创建新的子进程前提下,转去执行指定的命令,指定命令执行完毕后,终结该进程。
(exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境)
4)read:
命令格式: read [参数] [变量名](该变量不能为特殊变量)
功能:从标准输入读取字符串等信息,传给shell内部定义的变量。
read -t -p 'Pls input the num: ' num
5)shilft:
命令格式:shilft—Shilft positional parameters
功能:在程序中每使用一次shilft语句,都会使所有位置参数向左移动一个位置,最左边的变量被删除。
6)exit:
退出shell,可选定一个数字作为返回值。
2.处理变量内容