当前位置: 首页 > wzjs >正文

长春seo网站排名html5网站案例

长春seo网站排名,html5网站案例,jsp做网站框架,网络营销品牌策略有哪些🌟 各位看官好,我是egoist2023! 🌍 Linux Linux is not Unix ! 🚀 今天来学习命令行参数与环境变量的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多…

🌟 各位看官好,我是egoist2023!

🌍 Linux == Linux is not Unix !

🚀 今天来学习命令行参数与环境变量的相关知识。

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦!

目录

命令行参数

意义

环境变量

罗列Linux环境变量

PATH

OLDPWD

PWD

多方法获取环境变量

main函数获取

​编辑

getenv获取

environ获取

​编辑

我的进程如何获取环境变量 

环境变量全局属性

内建命令


命令行参数

main函数可以有参数吗?可以有几个参数呢?参数又是什么呢?带着这三个疑问往下阅读。

int main(int argc,char *argv[])
{printf("hello linux!\n");return 0;
}

我们或多或少在别人的程序中见过这种代码,清楚main函数是可以带参数的,并且可以有两个参数(实际上可以有3个参数,第3个是环境变量表)。那么这两个参数各代表什么含义呢?

  • argv是一个指针数组,它指向一个一个的字符串,最后以NULL结尾;
  • argc用来记录argv[]的元素个数。

我们的命令行参数会放到命令行参数表上,即argv,它用来存储命令行参数的每个单独的字符串。


意义

为什么要有命令行参数表呢?它能带来的意义又有哪些呢?

  1. 命令行参数传递:借助主函数的参数,能把命令行中用户输入的参数传递到程序内部,这样程序就能依据不同参数执行不同操作。
  2. 程序灵活性提升:无需对代码进行修改,通过命令行参数就能改变程序的运行方式或者配置信息。

从这两方面我们并不能体会到啊?因此小编写了段程序解释命令行参数带来的意义:

下图中写了一段程序,它借助main函数参数,让命令行参数传递的时候,通过匹配不同的命令行参数,如果第二个参数带的是v1则实现v1版本,带的是v2则实现v2版本,从而实现不同版本的逻辑,这带来的意义就是命令行参数传递实现不同的逻辑,同时我们也可以限制如果传递的命令行参数不符合我们的逻辑,则不能通过,提升了程序灵活性。

 💻如图实现: 

有没有一种可能我们之前所说的选项就是这样实现的呢?

是的没有错,Linux中许多指令也是借助了命令行参数才得以支持多模块实现,如ls指令。

ls -l -a -i

 ls的命令本质是一个程序,而我们之前说ls后面的是选项,今天我们对选项能有更深的理解,它是通过命令行参数匹配从而实现我们的目的。

-l 、 -a 本质是字符串,以一定的方式传递给ls内部的"main",在ls内部实现的时候,就可以根据不同的选项,实现类似功能的不同表现形式。

因此我们对指令又有了进一步的理解:指令是特定目录上执行的二进制程序,而选项则是根据不同的参数传递给"main",实现不同表现形式.


环境变量

引出概念:

  • 环境变量(environment variables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进行查找。
  • 环境变量是系统级别的一些全局变量,具备不同的用途(这也是为什么要有环境变量的原因)。

罗列Linux环境变量

那么该如何查看环境变量呢?

env 可以用来查看环境变量 , 这里主要讲三个重要的环境变量:PATH、OLDPWD、PWD.

  

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)
  • SHELL : 当前Shell,它的值通常是/bin/bash。

PATH

我们前面说过,指令也是一个可执行程序。为什么有些指令可以直接执⾏,不需要带路径,⽽我们自己的⼆进制程序需要带路径才能执行啊( 否则会报找不到 )这是为什么呢?

通过which命令查看ls所处的路径,可以看到是在/usr/bin的路径下。 什么意思呢 ? 即OS要执行该指令时,就需要/usr/bin路径,那么由谁给它提供呢 ? OS默认会在PATH路径下查找,若没有则会报错。而/usr/bin被包含在PATH环境变量中。

  1. 因此我只要证明 /usr/bin 不在PATH中时,此时再使用 ls 指令会向我们执行自己的程序一样报没有找到 ;
  2. 或者将我们自己的程序添加到PATH中,再执行自己的程序,若不会报错, 即可证明OS是在PATH中查找的。 

 

💻扩展:

PATH的环境变量改变了,该怎么进行复原呢?重启xshell即可,因为环境变量是内存级的。 

OLDPWD

OLDPWD环境变量用来记录当前用户最近一次所处路径。

💻证明: echo $OLDPWD可以展示最近一次所处路径.

  

PWD

这里总算可以解释pwd指令的原理了:

我们知道每个进程(包括xshell啊!)都会记录自己所处的工作路径,这在之前是已经验证过的.那么我们的PWD环境变量又从哪里而来呢? 

pwd 会读取 当前进程所处的cwd.

💻pwd指令原理:

当你在 shell 里输入 pwd,其实是启动了一个新的进程,它继承了父进程(你的 shell)的 cwd 。pwd 进程通过系统调用(如 getcwd())读取自己的 cwd,然后把它打印出来。由于 pwd 进程和你的 shell 进程的 cwd 是一样的,所以你看到的就是你当前 shell 所在的目录。


多方法获取环境变量

获取环境变量的方法有很多,这里主要介绍三种:

main函数获取

我们前面说了main函数是可以带3个参数的,而第3个参数则是环境变量表.下图中

💻模拟实现env指令:


getenv获取

getenv是C语言库提供的函数,它可以用来获取单个环境变量


environ获取

libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头⽂件中,所以在使⽤时 要⽤
extern声明。(实际上environ就是个二级指针,指向环境变量表)


我的进程如何获取环境变量 

我们大部分的指令以及自己实现的可执行程序,都不是有bash帮我们执行的,而是bash通过创建子进程的方式,让子进程继承了bash的环境变量,形成环境变量表。

问题1:为什么子进程可以继承bash的环境变量?

环境变量表是数据吗?是数据,并且是父进程的数据。子进程通常会继承父进程的代码和数据为副本,因此可以继承bash的环境变量。

问题2:bash从哪里获得环境变量的?

bash从系统的配置文件中获取,先会malloc环境变量表,解析配置文件的内容,把环境变量字符串依次放入到环境变量表里。

那么这就意味着bash一定会有两张表:

命令行参数表(一直在变)+ 环境变量表(比较稳定,内存级)

💻验证:

我们可以更改配置文件的信息,写入一段echo "哈哈,这个配置文件被执行了" 。则每次启动xshell时,bash都会从这个配置文件中形成环境变量表,在显示器上打印我们写入的信息。

  

输出结论:bash获取环境变量有两方面:配置文件 + 动态形成。 

环境变量全局属性

  • echo:显示某个环境变量值
  • export: 设置⼀个新的环境变量
  • unset: 清除环境变量
  • set: 显⽰本地定义的shell变量和环境变量

环境变量是具有全局属性的,可以被子进程继承下去;

相对应的本地变量是不具备全局属性的,这种变量是不能被子进程继承。

💻下图中证明本地变量是不可以被子进程所继承的:

MYENV是本地变量,执行程序时bash创建子进程,子进程以父进程为副本进行继承,包括环境变量.假设本地2变量可以被继承下去,那么getenv获取该变量,如果打印该变量不存在说明本地变量是不能被继承下去的.

 

内建命令

我们知道命令是可执行程序,其中的大部分命令需要通过创建子进程的性质执行。

那么肯定也存在一些命令是不需要通过创建子进程来执行,而是由bash来执行.那么这个命令在执行的时候是没有风险的.我们把这种命令叫做内建命令!!! 

💻echo 指令: 无论是本地变量还是环境变量,echo都能显式变量值。

我们说本地变量是不能被子进程继承下来的,说 明本地变量只在bash自 身有效,如果能打印出该变量的值,恰恰说明echo指令是一个内建命令。  

  


 

http://www.dtcms.com/wzjs/544702.html

相关文章:

  • 梧州单身相亲网站网站开发人员属于什么
  • 最好记得网站域名网站做支付功能
  • seo建站技术网站建设公司首页
  • 网站代码优化的方法石油网站编辑怎么做
  • 二手车网站建设论文网址搜索栏在哪
  • 郑州上街网站建设公司中国外贸公司排名
  • 小型门户网站建设硬件配置建设部网站实名制举报
  • 建设营销型网站读书wordpress
  • 1688货源网一件代发下载seo搜索引擎优化工程师招聘
  • 网站要怎么做wordpress跨站脚本攻击漏洞
  • 网站建设电销话术开场白wordpress 企业汉化主题
  • 手机网站Comdw网页代码
  • 无锡网站建设唯唯网络大型网站的设计
  • 泉州网站建设哪家公司好凡科建站平台
  • 重庆放心seo整站优化网站建设的策划方案
  • 龙陵网站建设seo推广培训班
  • 上海公司网站建设方案阳江网络问政平台新闻发布会
  • 打电话沟通做网站wordpress怎么设置派送中
  • 运城市住房与城乡建设厅网站淘宝网店的seo主要是
  • 四川德立胜建设工程有限公司网站公众平台登录官网
  • 锒川市住房和城乡建设局网站公告庄浪县县住房建设局网站
  • 义乌网站建设推广专家wordpress 部署
  • 学做静态网站网上购物系统源码
  • 网站 建设开发合同桂林北站停车场收费标准
  • 网站联盟关键词优化方法
  • 网站建设是固定资产吗wordpress 用户前台
  • 做淘宝有没有店小秘类型的网站做户型图的网站
  • 网站推广维护app界面生成器
  • 在云服务器上搭建网站惠州个人做网站联系人
  • 网站底部导航设置传统的网站开发模式