【Linux】命令行参数和环境变量

目录

一、命令行参数

1.1 main函数的参数

1.2 命令行参数

二、环境变量

2.1 概念

2.2 查看和设置环境变量

2.2.1 查看环境变量

2.2.2 设置环境变量

2.2.3 设置PATH环境变量

2.2.4 环境变量表

2.2.5 本地变量和环境变量的区别

2.2.6 内建命令和常规命令

2.3 环境变量相关的指令


一、命令行参数

1.1 main函数的参数

C语言中,'main'函数的标准原型是:

        int main(int argc, char *argv[])

或者,如果你不需要命令行参数,可以省略它们:

        int main(void)

在C和C++等编程语言中,一个程序的入口通常是'main'函数。'main'函数可以接受两个参数,这两个参数提供了程序启动时的命令行参数信息

  1. 'argc'(argument count):这是一个整数,表示传递给程序的命令行参数的数量。数组中的第一个元素('argv[0]')是程序的名称,因此'argc'总是至少为1。
  2. 'argv'(argument vector):这是一个指向字符串数组的指针,数组中的每个元素都是一个指向命令行参数的指针。第一个元素('argv[0]')是程序的名称,后续元素是程序启动时跟随在程序名称后面的参数。

例如,如果一个程序名为'myprog',并且用户在命令行中输入了以下命令:
myprog arg1 arg2 arg3
那么'main'函数将接收到的参数如下:
- 'argc'将会是4,因为包括程序名称在内总共有4个参数。
- 'argv'将会是一个包含4个字符串的数组:{"myprog", "arg1", "arg2", "arg3"}。

在程序中使用'argc'和'argv',可以编写处理命令行参数的代码,从而使得程序的行为可以根据用户的输入来改变。

1.2 命令行参数

在Linux操作系统中,命令行参数是用户在命令行界面中输入的,紧跟在命令后面的数据。这些参数提供了额外的信息,指导命令如何执行。命令行参数可以用来修改命令的行为,指定输入文件或目录,控制输出格式,以及执行其他各种任务。

可以理解为,命令是一个可执行程序,命令行参数使得命令可以支持各种指令级别的命令行选项的设置。通过命令行参数,用户可以在不修改程序源代码或配置文件的情况下,快速地调整程序的运行方式。

二、环境变量

2.1 概念

在Linux操作系统中,环境变量是用于存储有关系统环境的信息的变量,它们对于系统配置和运行在系统上的程序来说非常重要。环境变量通常是由系统自动设置,也可以由用户或程序设置。它们存在于每个进程的上下文中,并且可以传递给该进程创建的子进程。

在Linux中,常见的环境变量包括
- 'PATH':决定了Shell搜索可执行文件的目录列表。
- 'HOME':当前用户的主目录。
- 'PWD':当前工作目录。
- 'USER':当前登录的用户名。
- 'SHELL':当前用户的Shell程序路径。
- 'TERM':当前终端的类型。
- 'LANG':系统语言和区域设置。
- 'EDITOR':用户默认的文本编辑器。
- 'PS1':Shell提示符的格式。

环境变量的作用包括:
1.配置程序行为:许多程序会检查特定的环境变量来决定如何运行。例如,'PATH'变量决定 了Shell如何在当前目录和系统路径中查找可执行文件。
2.存储用户和系统信息:环境变量可以存储用户的主目录位置('HOME')、用户名('USER')、终端类型('TERM')等信息。
3.自定义环境:用户可以设置自己的环境变量来定制Shell的行为,或者为特定的应用程序提供配置信息。
4.传递信息:环境变量可以在进程之间传递信息,例如,一个进程可以通过设置环境变量来向其子进程传递特定的参数或配置。

2.2 查看和设置环境变量

2.2.1 查看环境变量

  • 在终端中,输入env命令时,它会列出当前用户的环境中的所有变量,包括系统变量和用户定义的变量。
  • 在C和C++代码中,使用getenv函数,它会返回一个指向相应值的指针,用来获取指定名称的环境变量的内容。
  • mian函数也可以有第三个参数,即环境变量表,通过环境变量表可以查看环境变量。
  • 在C和C++编程语言中,environ是一个全局指针(extern char **environ , <unsitd.h>),指向环境变量表。

2.2.2 设置环境变量

export命令是Shell的一个内置命令,用于设置或修改环境变量。

例如:export VARIABLE=value 
VARIABLE:要设置的环境变量名称。
value:环境变量的值。

直接在命令行修改,修改的是父进程的环境变量,这是在内存中的临时值,重启后就没有了,要是想每次启动都会存在这个环境变量,需要在脚本配置文件(家目录中的.bash_profile文件)中修改。

2.2.3 设置PATH环境变量

PATH环境变量定义了系统在执行命令时应该在哪些目录中搜索可执行文件。在命令行中输入一个命令时,系统会按照PATH环境变量的值,在指定的目录中查找命令的可执行文件。

例如,如果您的PATH环境变量设置如下:(注:冒号为分隔符)
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
这意味着当您在命令行中输入一个命令时,系统会按照以下顺序在以下目录中搜索可执行文件:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
如果命令在这些目录中找到,系统会执行它;如果找不到,系统会提示命令未找到。

可以通过修改PATH环境变量来指定不同的目录,或者在特定情况下为单个命令设置不同的路径。例如,如果想为某个特定的命令新增一个临时路径,可以这样做:
MY_COMMAND=/path/to/my/command
PATH=$PATH:$MY_COMMAND

这将追加/path/to/my/command到PATH环境变量的值中,从而使系统在执行MY_COMMAND命令时会先在/path/to/my/command目录中查找可执行文件。($PATH是PATH原本的值;重新登陆时会恢复成原PATH

2.2.4 环境变量表

系统启动我们的程序的时候,可以选择给我们的进程(main)提供两张表:
1.命令行参数表
2.环境变量表

命令行启动的进程都是shell/bash的子进程, 子进程的命令行参数和环境变量,是父进程bash给我们传递的。修改PATH修改的是bash进程内部的环境变量信息,每一次重新登陆,都会给我们形成新的bash解释器,并且新的bash解释器自动从父进程的环境变量信息中读取形成自己的环境变量表信息。环境变量信息是以脚本配置文件的形式存在的。

每一次登陆的时候,bash进程都会在家目录中(/home/username)读取 .bash_profile 配置文件中的内容,为我们bash进程形成一张环境变量表信息。因此长久的保存环境变量的信息就要在配置文件中设置环境变量。

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串

2.2.5 本地变量和环境变量的区别

  • 本地变量:只在bash进程内部有效,不会被子进程继承下去。
  • 环境变量:通过让所以子进程继承来实现自身的全局性。

2.2.6 内建命令和常规命令

  • 内建命令:shell命令行的一个函数,它们不依赖于外部可执行文件,可以直接读取shell内部定义的本地变量。
  • 常规命令:在磁盘中真正存在的可执行文件,需要由fork()创建子进程执行的命令。当用户输入一个常规命令时,Shell会查找命令对应的文件,并执行它。

例如上面讲到的export就是一个内建命令,它可以读取到命令行中的本地变量,并将它导入到环境变量表。而可执行程序读取不到该变量。

常见的内建命令:cd、echo、export、pwd、history、alias(设置别名)、unalias(删除别名)、exit(退出Shell)

常见的常规命令:ls、cp、mv、rm、grep、tar、ssh(安全外壳协议)、vim

2.3 环境变量相关的指令

  • 显示某个环境变量值:echo $变量名
  • 显示所有环境变量:env
  • 设置环境变量:export 变量名=内容
  • 设置本地变量:变量名=内容
  • 取消环境变量或本地变量:unset 变量名
  • 显示环境变量和本地变量:set

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/594889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新人0基础拼多多入门,纯小白快速入门多多(21节课)

课程内容&#xff1a; 1 店铺体系说明 .mp4 2 ㄠ衬雛饯铺运营雷区 ,mp4 3 店铺领航员 .mp4 4 店铺设置及管理 ,mp4 5 多多客服设置,mp4 6 店铺资金中心 .mp4 7 店铺运营小工具 ,mp4 8 售后及商品管理,mp4 9 发布机会商品.mp4 10 店铺营销 .mp4 11 产品类型 .mp4 12…

速锐得深入研究比亚迪E5电控系统及BCU数据及DBC控制策略

新能源汽车中比亚迪作为世界品牌的佼佼者&#xff0c;其E5车型凭借出色的电控系统成为了市场上的一颗璀璨明星。比亚迪E5电控系统不仅体现了技术的先进性&#xff0c;更是智能化、高效率的代名词&#xff0c;它如同一位智慧的指挥官&#xff0c;精确地掌控着汽车的每一个动作&a…

VGA项目:联合精简帧+双fifo+sobel算法 实现VGA显示(未完)

前言&#xff1a;该项目实际上是在很多基础的小练习上合成起来的&#xff0c;例如涉及到uart&#xff08;rs232&#xff09;的数据传输、双fifo流水线操作、VGA图像显示&#xff0c;本次内容在此基础上又增添了sobel算法&#xff0c;能实现图像的边沿监测并VGA显示。 文章目录…

深度学习之基于Vgg16卷积神经网络乳腺癌诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于VGG16卷积神经网络的乳腺癌诊断系统项目是一个结合深度学习技术和医学图像处理的创新项目&#xff0c;旨在提高…

JetPack之ViewModel+LiveData

目录 一、概述二、LiveData 使用2.1 创建 LiveData 对象2.2 观察 LiveData 对象2.3 更新 LiveData 对象 三、编写 LiveData Demo3.1 不使用 LiveData3.2 使用 MutableLiveData3.3 使用 MediatorLiveData3.3.1 监听 2 个数据源的变化3.3.2 编写模拟 2 个数据源更新的代码 四、Vi…

奇门辅助软件v2024.5

废话不说&#xff0c;先上链接 链接&#xff1a;https://pan.baidu.com/s/1_i11lMx4P_vrTs-6lpWoHA?pwd8v1m 提取码&#xff1a;8v1m 功能介绍 【宫内信息】是点击宫内某属性时显示的宫内基本信息。 【古籍宝鉴】是《御定奇门宝鉴》里的对应时局内容&#xff0c;但差补法置…

YashanDB与帆软信创商业智能软件完成兼容互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与帆软信创商业智能软件&#xff08;V6.0&#xff09;顺利完成兼容性互认证&#xff0c;经严格测试&#xff0c;双方产品能够相互兼容&#xff0c;稳定运行。 崖山数据库系统YashanDB是深圳计算科学研究院自主研发设计…

XSS Challenges 靶场通关解析

前言 XSS Challenges&#xff08;跨站脚本攻击挑战&#xff09;是一种用于学习和测试跨站脚本&#xff08;XSS&#xff09;漏洞的实验性平台。这些挑战旨在帮助安全研究人员和开发人员了解XSS漏洞的工作原理、检测方法和防御技巧。 通常&#xff0c;XSS Challenges平台提供一…

vite创建vue项目启动时域名为127.0.0.1修改为localhost不生效——问题解决

今天偶然间想起来年前整的一套vue3的框架&#xff0c;索性跑了一下&#xff0c;结果发现运行后地址为127.0.0.1而非localhost&#xff0c;所以想把域名改一下 找到vite.config.js文件中的export default defineConfig&#xff0c;在server中写入host:localhost 然后通过npm ru…

3d设计网站有哪些(2)?渲染100邀请码1a12

上次介绍了了几个设计网站&#xff0c;这次我们接着介绍。 1、Archive 3D Archive 3D是一个简单庞大的模型下载网站&#xff0c;可以下载的类型有家具、设备、飞行装备、门窗、厨房等。 2、3D Warehouse 3D Warehouse是预制3D模型网站&#xff0c;能与SketchUp无缝协作&…

软件杯 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

EFDC模型安装及建模方法;在排污口论证、水质模拟、地表水环评、地表水水源地划分、水环境容量计算等领域中的应用

目录 专题一 EFDC软件安装 专题二 EFDC模型讲解 专题三 一维河流模拟实操 专题四 建模前处理 专题五 EFDC网格剖分介绍 专题六 EFDC二维湖库水动力模拟/非保守染色剂模拟 专题七 EFDC水质模型参数及原理介绍 专题八 EFDC一、二、三维湖库水质模拟 专题九 基于EFDC的地…

Aigtek射频功率放大器的主要功能是什么

射频功率放大器是一种专门用于放大射频信号功率的电子器件&#xff0c;它在无线通信、雷达系统、卫星通信等射频应用中起着至关重要的作用。下面将详细介绍射频功率放大器的主要功能。 信号放大&#xff1a;射频功率放大器的主要功能之一就是将传入的射频信号放大到所需的功率水…

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…

利用PS中Lab颜色模式进行简单调色?

【原图】 详细步骤如下&#xff1a; Step 1 : 打开PS&#xff0c;打开素材&#xff0c;点菜单栏&#xff0c;【图像】-【模式】-【Lab颜色】&#xff0c;效果如下图 Step2&#xff1a;ctrl(或command)m打开曲线工具&#xff0c;选择a通道&#xff0c;效果如下图。 Step3: 把标…

埃及外宾亲临育菁 参观考察桌面CNC机床

随着我公司的规模不断壮大以及国际化建设工作的不断推进&#xff0c;广东育菁装备在国外的知名度也越来越高&#xff0c;4月25日&#xff0c;公司迎来了埃及外宾到访考察桌面型数控加工中心&#xff0c;桌面级数控车床等&#xff0c;育菁总经理杨先生等相关负责人对远到而来的埃…

git/gerrit使用遇到的问题

Push时出现的多个问题及其解决 branch【...】not found 这个错误通常出现在 Git 命令中指定的分支名称中包含特殊字符或者语法错误时。需要确保指定的分支名称是正确的&#xff0c;并且没有任何不支持的字符。 例如&#xff0c;如果分支名称是 feature/branch&#xff0c;应该…

写爬虫代码抓取Asterank中小行星数据

2024年5月4日 问题来源 解决方案 回顾2023年7月14日自己写的爬虫代码 import requests import re import pandas as pd texts[] def getData(page):#每页评论的网址urlhttps://item.jd.com/51963318622.html#comment#添加headers&#xff0c;伪装成浏览器headers{User-Agent:…

电脑切换窗口快捷键,让你轻松驾驭多个任务

在使用电脑时&#xff0c;经常需要切换不同的窗口&#xff0c;以便快速地访问不同的应用程序或任务。为了提高效率&#xff0c;掌握一些电脑切换窗口快捷键是非常重要的。本文将介绍三种在电脑上切换窗口的方法&#xff0c;帮助您更加高效地进行多任务处理。 方法1&#xff1a;…

FIFO Generate IP核使用——异步复位

FIFO Generator IP核提供了一个复位输入&#xff0c;当该输入被激活时&#xff0c;它会复位所有的计数器和输出寄存器。对于块RAM或分布式RAM实现&#xff0c;复位FIFO并不是必需的&#xff0c;可以在FIFO中禁用复位引脚。共有两种复位类型选项&#xff1a;异步复位和同步复位。…