您的位置:首页 > 运维架构 > Shell

shell 学习笔记 (二)——环境变量

2016-10-23 21:34 218 查看

env&&export

这两个命令均是列出当前系统中的所有的环境变量。

set

显示系统中的所有变量。包括 环境变量,用户自定义变量,以及与你自己使用的shell相关接口的变量。

几个重要的变量

LANG

使用者的语系。

RANDOM

产生随机数的变量,介于0~32767之间

PS1(shell接口变量)

这个变量来指示你登陆的shell的提示前缀

$

这也是一个特殊的变量,代表目前使用shell的pid

lyt@n55sl:~$ echo $$
8191


?

上一次执行指令所传回的值,通常来说,指令成功执行,会传回 0 ,否则会是其他数字,具体数字与指令本身有关

lyt@n55sl:~$ pwd
/home/lyt
lyt@n55sl:~$ echo $?
0
lyt@n55sl:~$ opopo
opopo:未找到命令
lyt@n55sl:~$ echo $?
127


export:自定义变量转环境变量

自定义变量与环境变量的区别

子程序会继承环境变量,自定义变量则不会继承

用法

export 变量名

对于环境变量的操作,子程序仅能继承父程序,不能将修改回传给父。

看下面的例子

┌─╼[~]
└────╼ export a=lyt
┌─╼[~]
└────╼ bash
lyt@n55sl:~$ echo $a
lyt
lyt@n55sl:~$ a=zxw
lyt@n55sl:~$ echo $a
zxw
lyt@n55sl:~$ exit
exit
┌─╼[~]
└────╼ echo $a
lyt


环境变量为何可被子程序引用?

当启动一个shell,操作系统会分配一个记忆区块给shell使用,这个内存的内存变量可以让子程序取用。

父程序使用export功能,可以使自定义环境变量的内容写入上述记忆区块当中。

当加载另一个shell时,子shell可以将父shell的环境变量所在的记忆区块导入自己的环境变量区块当中。

变量键盘读取,数组,宣告

read

用来读取来自键盘输入的变量

参数

-p 后接用单或双引号括起来的提示信息;

-t 后接等待用户输入的时间;

lyt@n55sl:~$ read -p "is this $SHELL ?" a
is this /bin/zsh ?


declare / typeset

宣告变量的类型

参数

-a 数组

-i 整形

-x 环境变量

-r 只读,不能更改,不可unset

lyt@n55sl:~$ i=10+20
lyt@n55sl:~$ echo $i
10+20
lyt@n55sl:~$ declare -i i=10+20
lyt@n55sl:~$ echo $i
30


r参数来添加或取消环境变量属性,-r添加为环境变量,+r取消为用户自定 变量

┌─╼[~]
└────╼ declare -x sss=10
┌─╼[~]
└────╼ env | grep sss
sss=10
┌─╼[~]
└────╼ declare +x sss=10
┌─╼[~]
└────╼ env | grep sss
┌─╼[~]
└╼


数组变量类型

声明 数组名[下标]=值

lyt@n55sl:~$ a[1]=20
lyt@n55sl:~$ a[0]=200
echo $a
200
lyt@n55sl:~$ echo ${a[0]} $a[1]
200 200[1]
lyt@n55sl:~$ echo ${a[0]} ${a[1]}
200 20


由此可见,数组名的默认值是数组的第一个元素,要想正确的输出数组元素,必须用${数组名[下标]}。

变量内容的删除与取代

删除

删除方式:# 或 %。

#:从前开始删除

%:从后开始删除

单个# 或 % ,取最短匹配

两个 # 或 % ,取最长匹配

写法:echo ${变量名 删除方式 匹配字符}

lyt@n55sl:~$ path=${PATH}
lyt@n55sl:~$ echo $path
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
删除最后一个目录
lyt@n55sl:~$ a=${path%:*}
lyt@n55sl:~$ echo $a
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games


取代

echo ${变量/旧字符串/新字符串}

关键词 / 一个代表仅替换第一个匹配的,两个代表替换所有匹配的

lyt@n55sl:~$ echo $path
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
将所有local替换为大写
lyt@n55sl:~$ echo ${path//local/LOCAL}
/usr/LOCAL/sbin:/usr/LOCAL/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/LOCAL/games:/snap/bin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: