linux 脚本读取配置文件,Shell配置文件(脚本)的加载

无论是否是交互式,是否是登录式,BashShell在启动时总要配置其运行环境,例如初始化环境变量、设置命令提示符、指定系统命令路径等。这个过程是通过加载一系列配置文件完成的,这些配置文件其实就是Shell脚本文件。

与BashShell有关的配置文件主要有 /etc/profile、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc、/etc/bashrc、/etc/profile.d/*.sh,不同的启动方式会加载不同的配置文件。

~表示用户主目录。*是通配符,/etc/profile.d/*.sh表示/etc/profile.d/目录下所有的脚本文件(以.sh结尾的文件)。

登录式的Shell

Bash官方文档说:如果是登录式的Shell,那么首先会读取和执行 /etc/profiles,这是所有用户的全局配置文件,接着会到用户主目录中寻找~/.bash_profile、~/.bash_login或者~/.profile,它们都是用户个人的配置文件。

不同的Linux发行版附带的个人配置文件也不同,有的可能只有其中一个,有的可能三者都有,笔者使用的是CentOS7,该发行版只有 ~/.bash_profile,其它两个都没有。

如果三个文件同时存在的话,那么到底加载哪一个呢?它们的优先级顺序是 ~/.bash_profile>~/.bash_login>~/.profile。

如果~/.bash_profile存在,那么一切以该文件为准,并且到此结束,不再加载其它的配置文件。

如果~/.bash_profile不存在,那么尝试加载 ~/.bash_login。~/.bash_login存在的话就到此结束,不存在的话就加载 ~/.profile。

注意,/etc/profiles文件还会嵌套加载 /etc/profile.d/*.sh,请看下面的代码:

foriin/etc/profile.d/*.sh;doif[-r"$i"];thenif["${-#*i}"!="$-"];then."$i"else."$i">/dev/nullfifidone

同样,~/.bash_profile也使用类似的方式加载~/.bashrc:

if[-f~/.bashrc];then.~/.bashrcfi

非登录的Shell

如果以非登录的方式启动Shell,那么就不会读取以上所说的配置文件,而是直接读取~/.bashrc。

~/.bashrc文件还会嵌套记在/etc/bashrc,请看下面的代码:

if[-f/etc/bashrc];then./etc/bashrcfi

~/.bashrc

对于普通用户来说,也许 ~/.bashrc才是最重要的文件,因为不管是否登录都会加载该文件。我们可以将自己的一些代码添加到 ~/.bashrc,这样每次启动Shell都可以个性化的配置。

你曾经是否感到迷惑Shell是怎样知道到哪里找到我们输入的命令的?例如,当我们输入ls后,Shell不会查找整个计算机系统,而是在指定的几个目录中检索(最终在/bin/目录中找到了ls程序),这些目录就包含在PATH变量中。

当用户登录Shell时,PATH变量会在/etc/profile文件中设置,然后在 ~/.bash_profile也会增加几个目录。如果没有登录Shell,PATH变量会在 /etc/bashrc文件中设置。

如果我们想增加自己的路径,可以将该路径放在 ~/.bashrc文件中,例如:

PATH=$PATH:$HOME/addon

将主目录下的addon目录也设置为系统路径。假如此时在addon目录下有一个getsum程序,它的作用是计算从m累加到n的和,那么我们不用cd到addon目录,直接输入getsum命令就能得到结果。

我已经用C语言粗略地实现了一个getsum程序,并附带了源码,有兴趣的读者可以猛击这里下载(源代码有不完善的地方请不要吐槽,我并没有做任何优化)。下载完成后请配置环境变量,然后输入如下的命令就可以得到结果:

[c.biancheng.net]$getsum-s1-e1005050

-s选项表示起始(start)数字,-e选项表示终止(end)数字,以上命令用来计算从1累加到100的和。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在shell中运行命令时,你经常需要从配置文件读取参数和选项。以下是一些常用的shell脚本读取配置文件的方法: 1. 使用source命令读取配置文件: 使用source命令可以将配置文件中的变量和函数导入到当前shell中。例如,如果你的配置文件名为config.sh,可以使用以下命令读取: ``` source config.sh ``` 这样就可以在当前shell中使用config.sh中定义的变量和函数。 2. 使用点号(.)命令读取配置文件: 点号(.)命令与source命令的作用相同,都可以将配置文件中的变量和函数导入到当前shell中。例如,如果你的配置文件名为config.sh,可以使用以下命令读取: ``` . config.sh ``` 这样就可以在当前shell中使用config.sh中定义的变量和函数。 3. 使用cat和while命令读取配置文件: 你可以使用cat命令读取配置文件的内容,并使用while命令逐行处理配置文件中的每个条目。例如,如果你的配置文件名为config.txt,其中每行都包含一个变量名和一个值,你可以使用以下命令读取: ``` cat config.txt | while read line; do eval "$line" done ``` 这将逐行读取config.txt文件,并使用eval命令将每个行中的内容转换为shell命令并执行。 4. 使用awk命令读取配置文件: 你可以使用awk命令读取配置文件中的每个变量和值,并将它们转换为shell变量。例如,如果你的配置文件名为config.txt,其中每行都包含一个变量名和一个值,你可以使用以下命令读取: ``` awk -F= '{print "export " $1"="$2}' config.txt | while read line; do eval "$line" done ``` 这将读取config.txt文件,并使用awk命令将每个变量和值转换为export命令,然后使用eval命令将export命令执行,将变量导入到当前shell中。 以上是一些常用的读取配置文件的方法,你可以根据自己的需要选择合适的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值