Linux命令行学习(1):环境变量

开篇语

这是Linux学习的第一篇。其实在Ubuntu上跑ROS,编译运行C++程序,解决兼容性问题,安装依赖库,在这段时间里,对Linux的许多命令都已经有了大概的了解。之所以,还要特地抽时间来专门学习一下,是因为我觉得仅凭借博客和Google上的碎片式的讲解虽然可以解燃眉之急,但不是长远之计。
本系列参考的书本为人民邮电出版社出版的图灵程序设计丛书中的《Linux命令行与shell脚本编程大全(第三版)》。
由于是自我学习笔记,所以定然不是对全书的按部就班的学习,而是只记录对我而言重要的内容。

1. 环境变量与局部变量

1.1 环境变量

Linux系统在开始bash会话时,就已经设置了一些全局环境变量,可以使用env或者printenv来显示,由于全局变量是十分繁多的,可以考虑用|grep来做查找,或者像printenv HOME那样,显示特定的环境变量。
当要使用环境变量时,应在前面加上$,下面命令用echo来显示了HOME的值:

echo $HOME
/home/host

题外话:波浪号~$HOME是一样的。

1.2 局部用户定义变量

设置方法很简单,直接像编程那样用=赋值即可,也无需声明,但=前后不可以有空格,否则会视为是几个不同的命令(与C++编程规范不太一样)。如:

my_variable=Hello
my_variable="Hello World"

需要注意的是,自己定义的一定要全小写,否则一旦不小心改了环境变量,会造成不可预料的后果。
局部变量仅限当前shell使用,若要设置自定义的全局环境变量,可以用export实现,变量名前无需$:

export my_variable

需要注意的是,在父shell定义赋值的全局环境变量,在子shell是无法修改的(无论用=还是export),子shell的局部变量与父shell中的全局环境变量可以重名,此时的处理与C++中的处理逻辑一致。

1.3 删除变量

unset命令即可,注意无需$:

unset my_variable

需要注意的是,在子shell中删除变量不会影响定义在父shell中的全局环境变量。

2 PATH环境变量

PATH环境变量规定了shell命令行中输入一个命令,shell要去搜索的目录,以找到相应的程序。在Ubuntu里,PATH环境变量内容如下:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

2.1 暂时修改PATH

只需引用原来的PATH,然后给字符串添加新目录即可,注意目录与目录之间是用:隔开的:

PATH=$PATH:/home/xyw/Scripts

更常用的是用单点符直接把当前路径导入到PATH:

PATH=$PATH:.

2.2 PATH的持久化

在交互式的shell进程中(即不是登录系统时自动启动的),bash并不会访问/etc/profile,而是检查用户目录中的.bashrc文件,实际上像ROS里常用到的source命令,就可以写在这里面,这样就不用每次都手动键入。
所以答案也很清楚了,就是修改~/.bashrc就可以实现持久化。

tips

涉及环境变量时,何时加$,何时不加?

答:要使用到变量就加$,要操作变量就不加,相当于$是一个解引符(变量可以视为C++中的指针,$可以视为*)。

结尾

令人尴尬的事情发生了,我发现好像其他的内容好像都不需要记住。比如df du这类维护硬盘的操作,或者ps kill等与进程相关的操作,或者vim编辑器的使用,或者cat more less的使用,或者tar相关的命令。这些都属于多且杂,但使用频率不高的命令,遇到的时候翻一翻就可以了。
而这本书剩下的基本都和shell脚本编程有关,虽然很炫酷,但用python写脚本不是更简单吗。。
所以这个系列可能刚开始,就要完结了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值