命令行参数和环境变量

devtools/2025/2/12 5:28:34/

目录

  • 命令行参数
  • 环境变量

命令行参数

main函数的参数可带可不带
可带:这些参数的意义:int argc, char *argv[]

  1 #include <stdio.h>2 #include <unistd.h>3 4 int main(int argc, char *argv[])5 {6     int i;7     for(i = 0; i < argc; i++)8     {9         printf("argv[%d] -> %s\n", i, argv[i]);                                                                                                            10     }11 }
[tt@kunkun state]$ ./myprocess 
argv[0] -> ./myprocess
[tt@kunkun state]$ ./myprocess -a
argv[0] -> ./myprocess
argv[1] -> -a
[tt@kunkun state]$ ./myprocess -a -b
^[[Aargv[0] -> ./myprocess
argv[1] -> -a
argv[2] -> -b
[tt@kunkun state]$ ./myprocess -a -b -c
argv[0] -> ./myprocess
argv[1] -> -a
argv[2] -> -b
argv[3] -> -c
[tt@kunkun state]$ ./myprocess -a -b -c -d
argv[0] -> ./myprocess
argv[1] -> -a
argv[2] -> -b
argv[3] -> -c
argv[4] -> -d

在这里插入图片描述

  1 #include <stdio.h>2 #include <unistd.h>3 #include <string.h>4 int main(int argc, char *argv[])5 {6     if(argc != 2)7     {8         printf("Usage: %s -[a,b,c,d]\n", argv[0]);9         return 1;10     }11 12     if(strcmp(argv[1], "-a") == 0)13     {14         printf("this is function1\n");15     }16     else if(strcmp(argv[1], "-b") == 0)17     {18         printf("this is function2\n");                                                                                                                     19     }20     else if(strcmp(argv[1], "-c") == 0)21     {22         printf("this is function3\n");23     }24     else if(strcmp(argv[1], "-d") == 0)25     {26         printf("this is function4\n");27     }28     else29     {30         printf("no this function!\n");31     }32}
[tt@kunkun state]$ ./myprocess 
Usage: ./myprocess -[a,b,c,d]
[tt@kunkun state]$ ./myprocess -a
this is function1
[tt@kunkun state]$ ./myprocess -b
this is function2
[tt@kunkun state]$ ./myprocess -c
this is function3
[tt@kunkun state]$ ./myprocess -d
this is function4
[tt@kunkun state]$ ./myprocess -e
no this function!

为什么要有命令行参数:
本质:命令行参数本质是交给我们程序的不同的选型,用来定制不同的程序功能。命令行中会携带很多的选项。

父进程的,默认能被子进程看到并访问
命令行中启动的程序,都会变成进程,其实都是bash的子进程
父进程bash做的命令行参数的传递

环境变量

Linux中,存在一些全局的设置,表明告诉命令行解释器,应该去那些路径下去寻找可执行程序

[tt@kunkun ~]$ /usr/bin/ls -l --color
total 16
drwxrwxr-x 4 tt tt 4096 Feb  6 21:16 code
-rw-rw-r-- 1 tt tt    0 Jan 21 21:15 code.c
drwxrwxr-x 2 tt tt 4096 Jan 22 15:48 gdb
-rw-rw-r-- 1 tt tt  827 Jan 20 22:03 install.sh
drwxrwxr-x 3 tt tt 4096 Jan 21 21:07 test
[tt@kunkun ~]$ cd /usr/bin
[tt@kunkun bin]$ ./ls -l

PATH:环境变量
echo $PATH:打印环境变量的内容
系统中很多的配置,在我们登录Linux系统的时候,已经被加载到bash进程中
bash在执行命令的时候,需要先找到命令,因为未来要加载

[tt@kunkun ev]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tt/.local/bin:/home/tt/bin

不能直接给环境变量赋值,相当于全部更改
但重启由于系统设置会重置
默认我们查到的环境变量是内存级的

[tt@kunkun ev]$ pwd
/home/tt/code/ev
[tt@kunkun ev]$ PATH=/home/tt/code/ev

该怎么做呢
但是依旧是内存级的

[tt@kunkun ev]$ PATH=$PATH:/home/tt/code/ev
[tt@kunkun ev]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tt/.local/bin:/home/tt/bin:/home/tt/code/ev

最开始的环境变量不是在内存中,而是在系统的对应的配置文件中
环境变量默认是在配置文件中的

[tt@kunkun ~]$ vim .bash_profile 
[tt@kunkun ~]$ vim .bashrc
[tt@kunkun ~]$ vim /etc/bashrc

在这里插入图片描述
env查看所有环境变量

[tt@kunkun ~]$ echo $HOME
/home/tt
[tt@kunkun ~]$ echo $PWD
/home/tt
[tt@kunkun ~]$ echo $SHELL
/bin/bash
[tt@kunkun ~]$ echo $HISTSIZE
1000
[tt@kunkun ~]$ history | head1  pwd2  su - tt3  exit4  pwd5  yum -y update6  yum -y install tree7  su root8  curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh9  ll10  sudo yum install -y gcc-c++

自己导环境变量
内存级

[tt@kunkun ~]$ export THIS_IS_MY_ENV=hellott
[tt@kunkun ~]$ env | grep hellott
THIS_IS_MY_ENV=hellott
[tt@kunkun ~]$ unset THIS_IS_MY_ENV
[tt@kunkun ~]$ env | grep hellott

本地变量

[tt@kunkun ~]$ hello=123456
[tt@kunkun ~]$ env | grep hello
[tt@kunkun ~]$ echo $hello
123456

环境变量默认也是可以被子进程拿到的。环境变量们,默认在bash内部

  1 #include<stdio.h>2 #include<unistd.h>3 #include<string.h>4 5 int main()6 {7     extern char **environ;8     int i;9     for(i = 0; environ[i]; i++)10     {11         printf("env[%d]->%s\n", i, environ[i]);                                                                                                          12     }13 }

bash进程启动的时候 ,默认会给我们的子进程形成两张表:
argv[]命令行参数表、env[]环境变量表。bash通过各种方式交给子进程。
用户输入的命令行、从OS的配置文件来

 1 #include<stdio.h>2 #include<unistd.h>3 #include<string.h>4 5 int main(int argc, char *argv[], char *env[])6 {7     int i;8     for(i = 0; env[i]; i++)9     {
10         printf("env[%d]->%s\n", i, env[i]);                                                                                                            
11     }
12}

环境变量具有系统级的全局属性,因为环境变量本身会被子进程继承下去
在这里插入图片描述
本地变量只在本bash内部有效,无法被子进程继承下去
导成环境变量,此时才能够被获取


http://www.ppmy.cn/devtools/158121.html

相关文章

前端技术学习——ES6核心基础

1、ES6与JavaScript之间的关系 ES6是JavaScript的一个版本&#xff1a;JavaScript是基于ECMAScript规范实现的编程语言&#xff0c;而ES6&#xff08;ECMAScript 2015&#xff09;是该规范的一个具体版本。 2、ES6的基础功能 &#xff08;1&#xff09;let和const let用于声明…

详细代码篇:python+mysql +h5实现基于的电影数据统计分析系统实战案例(二)

点击阅读原文&#xff1a;: 详细代码篇&#xff1a;pythonmysql h5实现基于的电影数据统计分析系统实战案例&#xff08;二&#xff09;&#xff01; https://mp.weixin.qq.com/s/h-w875AMJLeQ-NLdrDoEzg?token910031714&langzh_CN1、先按照目录结构创建对应的文件夹及文…

使用css3锥形渐变conic-gradient实现有趣样式

在之前的篇幅中介绍过css的线性渐变linear-gradient()和径向渐变radial-gradient()&#xff0c;如果你对这两种渐变还不了解的话&#xff0c;可以看一下之前录制的视频教程。 往期文档地址&#xff1a;https://blog.csdn.net/qq_18798149/article/details/134389038 视频学习地…

Java 反射机制的安全隐患与防范措施:在框架开发与代码审计中的应用

前言 在 Java 编程的广阔领域中&#xff0c;反射机制堪称一把神奇且强大的钥匙&#xff0c;它为开发者打开了通往动态编程的全新大门。借助反射&#xff0c;Java 程序获得了在运行时自我审视和操作的独特能力&#xff0c;极大地增强了代码的灵活性与适应性。 简单来讲&#x…

github - 使用

注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/。 之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。 Git…

【C/C++】每日温度 [ 栈的应用 ] 蓝桥杯/ACM备赛

数据结构考点&#xff1a;栈 题目描述&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0…

Scala语言的系统运维

Scala语言的系统运维 引言 在今天的科技发展时代&#xff0c;软件系统的复杂性和规模不断增加&#xff0c;因此系统运维的管理和监控显得尤为重要。在众多编程语言中&#xff0c;Scala因其高度的表达力和强大的性能而受到越来越多开发者和运维人员的青睐。本文将探讨Scala语言…

Android车机DIY开发之软件篇(十) NXP MfgTool和UUU的使用

标题Android车机DIY开发之软件篇(十) NXP MfgTool和UUU的使用 一、MfgTool工具 1.基本原理 1、先向DDR下载一个linux系统2. 通过linux完成烧写files里面保存的是最终保存到开发板中的uboot.imx zimage dtb rootfsvbs是在打开mfgtool2和很多参数ucl2.xml表示文件选择 定义自…