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

【Linux课程学习】:命令行参数,环境变量

🎁个人主页:我们的五年

🔍系列专栏:Linux课程学习 

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

 

目录

命令行参数:

用命令行参数实现不同功能的程序:

main函数的参数是谁传递的?

mian函数被其他的函数调用:

环境变量:

查看环境变量:

为什么指令可以不带路径就能运行?

让我们自己的程序也可以不带路径运行:

环境变量的配置文件:

用户的配置文件


1.变量定义在for循环中,在c99和c++中才支持:

gcc $^ -o $@  -std=c99

2.命令行也是一个进程,它的父进程都是shell。

3.对于父子进程,对于父进程只读的数据,不会修改的数据,不会拷贝一份,但是子进程可以看到。

4.编译器,加载器,操作系统表示互相割裂的,彼此有联系。

5.env和argv都是以NULL结尾,env没有个数,可以通过这样的方法进行打印env。

6.echo进行打印时,如果不加$表示的是字符串,加$才表示变量。

7.PATH=……:这样进行修改环境变量PATH是覆盖式的修改。

8.我们进行的环境变量的修改,只是改了内存级的环境变量,进程中的环境变量。当我们退出以后,环境变量重新被加载,这样就没有了我们之前修改的环境变量。环境变量在系统的配置文件中。文件时磁盘级存储的。

9.打开shell---》启动一个进程---》读取系统用户的环境变量》在内存中就会保存这些环境变量

10.source 文件:让配置文件生效。

命令行参数:

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

argc表示参数的个数,crgv[]表示参数清单,是一个一个的字符串。

根据下面的测试结果,我们知道argv是我们在命令行输入的命令,所以argv[1]是./code ,后面的根据输入的命令而定。

#include <stdio.h>int main(int argc,char* argv[])
{printf("argc:%d\n",argc);for(int i=0;i<argc;i++){printf("agrv[%d]:%s\n",i,argv[i]);}return 0;
}

用命令行参数实现不同功能的程序:

有了命令参数,让一个程序可以实现不同的功能。

比如:命令中的选项的实现

#include <stdio.h>    
#include <string.h>    int main(int argc,char* argv[])    
{    if(argc<2)    {    printf("未传参数,opt1,opt2,opt3\n");    }    else if(argc>2)    {    printf("参数过多,pt1,opt2,opt3\n");    }    else if(strcmp(argv[1],"opt1")==0)    {    printf("l love xy!\n");    }    else if(strcmp(argv[1],"opt2")==0)    {    printf("l love xy!,Future home will have bathtubs!\n");    }    else if(strcmp(argv[1],"opt3")==0)    {    printf("l love you,Future home will have bathtubs!l promise!\n");                                                                                                                                          }    else    {    printf("参数错误\n");    }    return 0;    
}    

main函数的参数是谁传递的?

1.首先被shell(命令行解释器)拿到。然后shell根据空格,就形成了一张表(argv),也就可以知道元素个数(argc)。这张表中每一个都指向一个字符串,最后以NULL结尾。

2.命令执行的时候,给进程传递,命令行参数。此时就形成了全局的argc和argv[ ],命令行参数是不会发生变化的,这样子进程不用拷贝一份,argc和argv[ ]不会进行修改,只需要只读就行。但是子进程也可以看到。

mian函数被其他的函数调用:

根据参数的不同,就调不同的mian函数。


环境变量:

mian函数中的env:环境变量。

mian中的argv和env都是一张表结构。

查看env,因为argv和env都是以NULL结尾的,所以我们可以以env[i]进行判断真假进行打印所以的env。

for(int i=0;env[i];i++)
{printf("env[%d]:%s\n",i,env[i]);
}  

查看环境变量:

1.环境变量是指操作系统中用来指定操作系统运行环境的一些参数。

2.启动的任何一个进程,都会传递这些参数。所以我们才能写一个程序,通过env打印环境变量。

3..环境变量一般用于特殊用途,一般具有全局属性

4.比如我们从来不知道我们要链接的动态库在哪里,还是可以链接成功。这是环境变量帮助编译器进行查找

环境的变量的基本格式:key=value,全局变量。

全部都是什么=什么

HISTSIZE:表示命令保存条数。

PATH:告诉shell,应该去哪个路进行查找指令。

PWD:当前用户所在目录。

为什么指令可以不带路径就能运行?

PATH环境变量告诉了shell,应该要去哪个路径下查找。

echo $PATH:打印PATH环境变量。

有很多的路径,以:作为分隔符。

我们自己的程序要带./才能找到我们要执行的程序。

而系统就能知道指令在/user/bin路劲下。

PATH环境变量:系统可执行文件的搜索路径集合。

我们进行的环境变量的修改,只是改了内存级的环境变量,进程中的环境变量。当我们退出以后,环境变量重新被加载,这样就没有了我们之前修改的环境变量。


让我们自己的程序也可以不带路径运行:

PATH=……:PATH覆盖式的修改环境变量PATH。

方法一:

可以把我们的程序拷贝到PATH中的任何一个目录下。

方法二:

在PATH中加入我们的可执行程序的目录。可以先pwd查看,然后echo $PATH查看PATH,最后把两个进行拼接,就可以了。

也可以直接$PATH,加上分隔符:,最后加上我们的路径。

如果我们在配置文件中修改PATH,那么每次启动shell的时候,我们新增的PATH被加载。

环境变量的配置文件:

此时在用户下的两个环境变量:都是隐藏文件,以.开头

.bashrc

.bash_profile

用户的配置文件

用户的配置文件,在启动shell的时候,也是要被加载的。

它也是以$PATH的方式进行增加新的PATH环境变量。

让配置文件生效:
source 文件

相关文章:

【Linux课程学习】:命令行参数,环境变量

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 命令行参数&#xff1a; 用命令行参数实现不同…...

HTB:WifineticTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用curl访问靶机8080端口 使用浏览器直接访问/login路径 漏洞利用 使用searchsploit搜索该WebAPP漏洞 Payload USER_FLAG&#xff1a;bb…...

mac安装Pytest、Allure、brew

安装环境 安装pytest 命令 pip3 install pytest 安装allure 命令&#xff1a;brew install allure 好吧 那我们在安装allure之前 我们先安装brew 安装brew 去了官网复制了命令 还是无法下载 如果你们也和我一样可以用这个方法哦 使用国内的代码仓库来执行brew的安装脚本…...

关于相机选型的一些参数说明

上一篇&#xff1a;关于相机的一些参数计算&#xff08;靶面、视野等&#xff09; 目录 1.卷帘快门和全局快门1.1 卷帘快门1.2 全局快门PS&#xff1a;视觉伺服与快门选择 2.黑白和彩色3.CCD和CMOS3.1 CCD3.2 CMOSCCD VS CMOS 4.面阵和线扫4.1 面阵4.2 线扫4.3 面阵 VS 线扫 5.…...

深入解析 Cron 表达式高级用法:Spring 与 Linux Crontab 的全面对比与实践20241120

深入解析 Cron 表达式高级用法&#xff1a;Spring 与 Linux Crontab 的全面对比与实践 任务调度是后台服务中的重要组成部分&#xff0c;无论是定期数据备份、日志归档还是周期性报表生成&#xff0c;Cron 表达式始终是描述这些任务规则的核心工具。本文将聚焦 Spring Cron 表…...

24软专 数据结构

1、A[n]&#xff0c;k&#xff0c;将数组向右循环移动k位。要求时间复杂度O(n)&#xff0c;空间O(1)。 思路&#xff1a;采用三次反转数组的操作&#xff0c;可以实现时间复杂度为O(n)&#xff0c;空间复杂度为O(1)的算法。 void moveElem(int array[],int k,int length){//a…...

洛谷 P1616 疯狂的采药 C语言 记忆化搜索

题目&#xff1a; https://www.luogu.com.cn/problem/P1616?contestId215526 完全背包问题&#xff0c;最后一个超出空间了。完全背包和就是无限次的拿&#xff0c;公式跟01背包差不多。 但是&#xff0c;只有当前能拿和拿不下&#xff0c;换下一个。注意要处理好边界条件。…...

#渗透测试#红蓝攻防#HW#SRC漏洞挖掘01之静态页面渗透

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

element-plus入门教程:Button

一、Button组件概述 Element Plus的Button组件是一个常用的操作按钮&#xff0c;提供了多种类型、尺寸、状态等配置选项&#xff0c;以满足不同的交互需求。 二、安装Element Plus 在Vue 3项目中&#xff0c;可以通过npm或yarn来安装Element Plus。 npm install element-pl…...

oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist

oneplus6线刷android10.0.1 oneplus6线刷包(官方android10.0.1)下载、线刷教程&#xff1a; OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11-zip 启用开发者模式 设置 / 连续点击6次版本号 : 启用开发者模式设置/开发者模式/{打开 usb调试, 打开 网络adb调试,…...

flux的版本

1.flux1-dev.safetensors https://huggingface.co/black-forest-labs/FLUX.1-devhttps://huggingface.co/black-forest-labs/FLUX.1-dev原生的23.8G的模型。原生12B的模型,float16的。需要配合ae.safetensors,flux1-dev.safetensors以及clip-l和T5的权重使用,注意ae.sft和f…...

Kafka 数据倾斜:原因、影响与解决方案

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

【从零开始的LeetCode-算法】3297. 统计重新排列后包含另一个字符串的子字符串数目 I

给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新排列后&#xff0c;word2 是重排字符串的 前缀&#xff0c;那么我们称字符串 x 是 合法的 。 请你返回 word1 中 合法 子字符串的数目。 示例 1&#xff1a; 输入&#xff1a;word1 "bcca", word2 "…...

【2024APMCM亚太赛A题】完整参考论文与代码分享

A题 一、问题重述二、问题分析问题一&#xff1a;水下图像分类问题二&#xff1a;退化原因建模问题三&#xff1a;针对单一退化的图像增强方法问题四&#xff1a;复杂场景的综合增强模型问题五&#xff1a;针对性增强与综合增强的比较 三、问题假设退化特征独立性假设物理模型普…...

Excel求和如何过滤错误值

一、问题的提出 平时&#xff0c;我们在使用Excel时&#xff0c;最常用的功能就是求和了&#xff0c;一说到求和你可能想到用sum函数&#xff0c;但是如果sum的求和区域有#value #Div等错误值怎么办&#xff1f;如下图&#xff0c;记算C列中工资的总和。 直接用肯定会报错&…...

Android 常用命令和工具解析之GPU相关

目录 1、GPU基本信息 1.1 获取GPU基本信息 1.2 伪造GPU基本信息 2、GPU内存信息 3、经典案例 案例1&#xff1a;GPU伪造信息方案 案例2&#xff1a;GPU内存统计算法 GPU 指的是 Graphics Processing Unit&#xff0c;即图形处理单元。GPU 是一种专门用于处理图形和图像相…...

刷题——【模板】二维前缀和

前缀和 题目题目链接题解方法一方法二 题目 描述 给你一个 n 行 m 列的矩阵 A &#xff0c;下标从1开始。 接下来有 q 次查询&#xff0c;每次查询输入 4 个参数 x1 , y1 , x2 , y2 请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和&#xff0c; 输入描述&#x…...

Xilinx 7 系列 FPGA的各引脚外围电路接法

Xilinx 7系列FPGA的外围电路接法涉及到多个方面&#xff0c;包括电源引脚、时钟输入引脚、FPGA配置引脚、JTAG调试引脚&#xff0c;以及其他辅助引脚。 本文参考资料&#xff1a; ds180 - 7 Series FPGAs Data Sheet - Overview ds181 - Artix 7 FPGAs Data Sheet - DC and AC…...

Python 爬虫 (1)基础 | 目标网站

一、目标网站 1、加密网站 1.1、关键字比较明确 企名片&#xff1a;https://wx.qmpsee.com/articleDetail?idfeef62bfdac45a94b9cd89aed5c235be 1.2、关键字比较泛 烯牛数据&#xff1a;https://www.xiniudata.com/project/event/lib/invest...

数字后端零基础入门系列 | Innovus零基础LAB学习Day11(Function ECO流程)

###LAB 20 Engineering Change Orders (ECO) 这个章节的学习目标是学习数字IC后端实现innovus中的一种做function eco的flow。对于初学者&#xff0c;如果前面的lab还没掌握好的&#xff0c;可以直接跳过这节内容。有时间的同学&#xff0c;可以熟悉掌握下这个flow。 数字后端…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...