目录
一、命令行参数
1.什么是命令行参数
2.为什么要有命令行参数
(1)书写的代码段
(2)实际的代码段
3.Linux中的命令行参数
二、环境变量
1.什么是环境变量?
2.获取环境变量
(1)指令获取
编辑
编辑
(2)代码获取
(3)系统调用获取
3.常见环境变量
4.和环境变量相关的指令
5.环境变量具有全局属性
一、命令行参数
1.什么是命令行参数
- 命令行参数(Command-Line Arguments)是指在命令行界面(CLI,Command-Line Interface)中运行程序时,紧随程序名称之后传递给程序的额外信息或指令。这些参数允许用户自定义程序的行为,而无需修改程序代码。命令行参数通常用于指定输入文件、输出文件、配置选项、运行模式等。
2.为什么要有命令行参数
- 同一个程序,可以根据得到的参数、选项的不同,表现不同的功能
(1)书写的代码段
int main()
{
return 0;
}
(2)实际的代码段
int main(int argc,char*argv[])
{
return 0;
}
- argc(argument count),表示传递给程序的命令行参数的数量(包括程序本身的名称)。argc的值至少为1,因为第一个参数始终是程序的名称
- argv(argument vector),存储了所有的命令行参数。argv数组中的每个元素都是一个指向字符串的指针,这些字符串包含了每一个传递给程序的命令行参数。argv[0]是程序的名称,argv[1]是传递给程序的第一个参数,以此类推
3.Linux中的命令行参数
ls -a -l
- 这就是Linux中的一个命令行参数,首先将其以字符串存储,被shell拿到后按照空格分隔,形成argv表,再得到argc参数
二、环境变量
1.什么是环境变量?
- 环境变量(Environment Variables)是在操作系统中用来指定操作系统运行环境的一些参数。这些参数定义了程序运行时的各种配置,比如文件路径、系统资源位置、程序行为等。环境变量可以被操作系统及其上运行的程序读取和使用
int main(int argc,char*argv[],char*env[])
{
}
- 图示表示:
2.获取环境变量
(1)指令获取
env
echo $NAME
(2)代码获取
#include <stdio.h>
#include <unistd.h>
int main(int argc,char*argv[],char*env[])
{
int i = 0;
while(env[i])
{
printf("%s\n",env[i]);
i++;
sleep(1);
}
return 0;
}
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
extern char** environ;
int i = 0;
while(environ[i])
{
printf("%s\n",environ[i]);
i++;
sleep(1);
}
return 0;
}
(3)系统调用获取
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("%s\n",getenv("PATH"));
return 0;
}
- getenv函数
char *getenv(const char *name);
参数:
name
:一个指向以空字符结尾的字符串的指针,该字符串包含要检索的环境变量的名称返回值:
- 如果环境变量存在,
getenv
返回一个指向该环境变量值的指针- 如果环境变量不存在,
getenv
返回NULL
3.常见环境变量
- PATH:指定命令的搜索路径。当用户在命令行中输入一个命令时,系统会在PATH环境变量中列出的目录中查找对应的可执行文件
- HOME:指定用户的工作目录,即用户登录到系统时所处的默认目录
- USER:指定当前登录用户的用户名
- TEMP:指定临时文件夹的路径。当程序需要创建临时文件时,会在这个目录下创建
- SHELL:当前用户的Shell类型,如
/bin/bash
- LANGUGE:语言相关的环境变量,多语言系统可以修改此环境变量来设置程序的语言偏好
- MAIL:当前用户的邮件存放目录(在某些系统中可能不适用)
- PS1:基本提示符,对于root用户是
#
,对于普通用户是$
(主要在Linux和macOS中)- HISTSIZE:历史记录数(主要在Linux和macOS的shell中)
- LOGNAME:当前用户的登录名(主要在Linux中)
- HOSTNAME:指主机的名称(主要在Linux和macOS中)
4.和环境变量相关的指令
- echo:显示某个环境变量值
- enport:设置一个新的环境变量
- env:显示所有的环境变量
- unset:清楚环境变量
- set:显示本地定义的shell变量和环境变量
5.环境变量具有全局属性
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t id = fork();
if(id == 0)
{
printf("%s\n",getenv("SHELL"));
sleep(1);
}
else
{
printf("%s\n",getenv("SHELL"));
sleep(1);
}
return 0;
}