问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux Shell脚本系列教程:使用函数添加环境变量

发布网友 发布时间:2023-09-23 10:25

我来回答

1个回答

热心网友 时间:2024-12-03 14:07

这篇文章主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下
一、简介
环境变量通常用于存储路径列表,这些路径用于搜索可执行文件、库文件等。例如:$PATH、$LD_LIBRARY_PATH,它们通常看起来像这样:
代码如下:
PATH=/usr/bin;bin
LD_LIBRARY_PATH=/usr/lib;lib
这意味着只要shell需要运行二进制可执行文件时,它会首先查找/usr/bin,然后查找/bin。在ubuntu14.04中,PATH和LD_LIBRARY_PATH存储的路径如下所示:
代码如下:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
/sbin:/bin:/usr/games:/usr/local/games
LD_LIBRARY_PATH="" #默认情况下,该变量未定义
二、添加环境变量
当你必须使用源代码编译生成程序并将其安装到某个特定路径中时,有项极其常见的任务就是讲该程序的bin目录加入PATH环境变量,将其所依赖的库目录加入LD_LIBRARY_PATH环境变量,以便可以从命令行终端正确运行软件。假设我们将testApp安装到/opt/testApp目录中,它的二进制文件在bin目录中,库文件在lib目录中,则添加环境变量的方法如下:
代码如下:
export PATH=/opt/testApp/bin:$PATH #路径之间以冒号(:)分隔
export LD_LIBRARY_PATH=/opt/testApp/lib:$LD_LIBRARY_PATH
三、使用函数添加环境变量
当要添加的路径较少的时候,可以逐个手动添加,但是,当路径较长较多时,手动添加就会变得耗时耗力,而且出错的可能性会增大。其实大可不必如此做,我们可以在.bashrc-中加入可以添加环境变量的函数,由函数完成对环境变量的添加,例如我们可以用下面的函数完成1.4.2节的任务:
代码如下:
prepend() { [ -d "$2" ] eval $1=/"$2':'/$$1/" export $1; }
这个函数需要两个参数,1和2,其中1用于存放环境变量的名称,如PATH,2用于存放将要添加的环境变量,例如/opt/testApp/bin。
该函数首先执行[ -d “$2”]语句,判断将要添加的路径是否存在,存在则执行后面的语句,否则函数结束;接着执行第二条语句,该语句将要添加的路径添加在对应环境变量的开头部分,即使用前插法添加路径;最后使用export $1使得环境变量生效。
注意:语句eval $1=/”$2':'/$$1/”比较难以理解,$$1可以写成/${/$1},这样比较容易理解,表示首先取得函数的第一个参数,然后再提取该参数的内容。例如1.4.2节中的环境变量可以用如下的方式添加:
代码如下:
prepend() PATH /opt/testApp/bin #$1为PATH,$2为/opt/testApp/bin
prepend() LD_LIBRARY_PATH /opt/testApp/lib #$1为LD_LIBRARY_PATH,$2为/opt/testApp/lib
用以上函数添加环境变量确实方便不少,但这个函数本身不够完善,当环境变量为空时,这是将会在末尾添加一个多余的冒号(:),需要作如下改变,使得函数更加严谨:
代码如下:
prepend(){ [ -d "$2" ] eval $1=/"/$2/$/{$1:+':'/$$1}/" export $1 }
改动的地方仅有第二个语句,这里用到了一种shell参数扩展的形式:
代码如下:
${parameter:+expression}
当且仅当parameter有值而且不为空,才使用expression的值,这样可以避免添加空变量的情况。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
微信限额20万怎样提到30万 微信怎么提升限额 微信限制额度二十万了怎么办 爱奇艺电视版会员电影没声音 爱奇艺怎么没声音了 爱奇艺万能播放器怎么没声音-爱奇艺播放器没声音修复方法 爱奇艺播放没有声音了怎么回事 主持人刘炽朗诵《采桑子·重阳》 卧室空间大了摆放什么风水好 卧室空间大了摆放什么 中国平安金融集团上海分公司这公司是一家怎样的公司?是骗子吗? 在电视剧《家有儿女》里你对哪个角色印象最深刻? nc用友系统新增固定资产没保存,卡片编码生成了如何取消编码 用友软件中以前月份固定资产卡片可以修改吗?需要修改类别! 用友U8固定资产模块,可不可以修改以前的固定资产编号? 梓材荫泽是什么意思 梓泽指什么动物 去不了给同事结婚祝福语 餐厅有哪些行为是违反《消法》的? 餐饮服务提供者违反食品安全法律法规及刑法规定 c语言题目求教 求教C语言题 C语言编程问题,在线求教!! 求教一道c语言题,求详细过程 框架柱,电渣压力焊的,每一层的连接区段都是不同的吗? 电渣压力焊柱子接头在梁底下10公分可以吗? 构造柱钢筋绑扎接头在何位置好? 框架柱钢筋的电渣压力焊接头的位置能留在施工缝附近20厘米处吗_百度知... 框架柱子电渣压力焊接头部位 红肉苹果和红叶海棠的区别,麻烦高手形态特征和习性方面讲解,尤其是花... 抖创衣橱服装可以投资吗 欧普吸顶灯照亮你的生活空间 什么牌子的防蜂服最好 来宾市兴宾区平阳镇溯社乡弄台村弄河屯可以去合山市办身份证吗 广西来宾异地办理身份证 您好:我娃在学校脚烫伤。现在已经康复了,但是脚走路还是瘸,我们应该找... 关于偷菜的网名,急快 成熟又不失幽默的网名成熟幽默风趣网名 ...曼昆的经济学原理宏观分册的第八版英文版和第七版的中文版有什么差别... 开水炀伤脚后十来天走路不稳是啥原因_百度拇指医生 适合的女生QQ网名 求个性网名和个性签名 不是qq好友怎么偷菜 火星上的最后时日豆瓣评分多少 支付宝收款码可以收信用卡的钱吗? ...固有一死,或重于泰山,或轻于鸿毛这是什么在 海尔洗衣机没有灯怎么回事 重装系统时突然卡在按F2or DEL to enter bios setting? ...press del or f2 to enter uefi bios setting什么意思? ...press del or f2 to enter bios setting,但是按什么键都没反应,按... 海尔洗衣机没有灯怎么办