欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 命令行参数和环境变量

命令行参数和环境变量

2025/2/13 3:40:24 来源:https://blog.csdn.net/wangtianTTT/article/details/145538162  浏览:    关键词:命令行参数和环境变量

目录

  • 命令行参数
  • 环境变量

命令行参数

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内部有效,无法被子进程继承下去
导成环境变量,此时才能够被获取

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com