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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值