我与Linux的爱恋:命令行参数|环境变量


🔥个人主页guoguoqiang. 🔥专栏Linux的学习

文章目录

一.命令行参数

【示例1】main函数也是函数,main函数可以带参吗?

没错,main函数有三种形式,其中最完整的形式是

c 复制代码
int main(int argc, char* argv[], char* env[])
{
 
}
c 复制代码
int main(int argc, char* argc[]){}

main函数正常不带参数,这些参数是什么呢?这些参数是命令行参数。

·argc(argument count)是一个整数,表示传递给程序的命令行参数的数量。

·argv(argument vector)是一个字符指针数组,其中每个指针指向一个参数字符串。

我们看一下这个argv里面有什么

c 复制代码
int main(int argc, char* argv[]){
  for(int i = 0; i < argc; i++){
    printf("argv[%d]->%s\n",i,argv[i]);
  }
  return 0;
}

用来查看argv里面有什么。

为什么要有命令行参数?

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

我们可以用来自定义命令

c 复制代码
#include <stdio.h>
#include <string.h>
 
int main(int argc,char* argv[],char* env[]){
 
  if(argc == 2 && strcmp("-a",argv[1]) == 0)
  {
    printf("Hello, I am sul\n");
  }
  else if(argc == 2 && strcmp("-b",argv[1]) == 0)
  {
    printf("sul is cool!\n");
  }else{
    printf("\r\tYou are supposed to use -a or -b\n");
  }
 
  return 0;
}

结论1:父进程的数据,能被子进程看到并且访问

结论2:命令行中启动的程序,都会变成进程,其实都是bash的子进程

所以也就是父进程bash干的。bash是一个命令行解释器,我们输入的./sul -b默认是输入给父进程bash/shell的

1.程序启动时:当您在命令行中输入程序名称并按回车时,命令行解释器(如 shell)会启动程序,并将命令行参数传递给程序。

2.操作系统:操作系统负责创建进程,并将命令行参数准备好。当程序开始执行时,操作系统将参数传递给程序的 main 函数

二.环境变量

1.环境变量的基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

环境变量通常具有某些特殊用途,在系统当中通常具有全局特性。

我们在系统中执行ls命令时,不需要./ls,而我们执行自己编写的C语言程序,并编译为可执行程序时,确需要使用./才能运行,这是为什么呢?

使用which命令可以查看该指令的存储位置,比如 which ls,会发现ls存储在/usr/bin/目录中

系统中维护了一个PATH环境变量,系统可以帮助我们在PATH环境变量保存的各个路径中查找命令。echo $PATH 命令的作用是输出当前用户的PATH环境变量值。这个值通常包含多个目录,用冒号(:)分隔。例如:

也就是说只要我们执行的某个命令在PATH环境变量下,就可以直接使用我们的程序。就不用使用./就可以执行程序了。

我们可以通过将可执行文件保存到PATH指定目录,这样就可以不带./运行了。但是这种方式会污染系统的命令,所以我们不建议使用这种方式。

我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找

2.查看环境变量的方法

echo $[环境变量名]

常见的环境变量:

PATH : 指定命令的搜索路径

HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

SHELL : 当前Shell,它的值通常是/bin/bash。

SHELL环境变量定义了当前用户的默认shell类型。这个变量告诉系统在用户登录时应该启动哪个shell。shell是用户与操作系统交互的界面,它负责解释用户输入的命令并执行它们。

默认情况下,当用户登录时,系统会启动用户配置的默认shell。这个shell可以是各种类型的shell,如Bash、Zsh、Fish等。不同的shell有不同的命令语法和特性,因此用户可以根据个人喜好或工作需要选择不同的shell。

SHELL变量的值通常是shell的路径,例如:

/bin/bash:Bash(Bourne-Again SHell)是大多数Unix-like系统中默认的shell。

/bin/zsh:Zsh(Z shell)是一个强大的shell,提供了许多扩展和增强功能。

/bin/fish:Fish是一个现代化的shell,以其简洁的语法和强大的自动完成功能而受到欢迎。

3.环境变量相关命令

1.echo: 显示某个环境变量值

2.export:设置一个新的环境变量

注意:export设置的环境变量仅在当前会话有效,当我们将整个会话关闭,重新打开Linux命令行时,这个环境变量就会消失。

3.env:显示所有环境变量

4.unset:清除环境变量

5.set:显示本地定义的shell变量和环境变量

显示本地定义变量的前20行

我们可以直接在bash命令行直接定义变量,不再使用export。set除了显示环境变量外,还显示了本地自定义的shell变量,例如

本地变量与bash环境变量的区别:本地定义的变量是局部变量,只在当前shell中有效,而环境变量是全局变量,在整个系统中都是可见的。环境变量通常用于设置系统级别的配置,而本地定义的变量用于存储脚本或命令行中的临时数据。

相关推荐
charlie1145141911 小时前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
c语言·stm32·单片机·教程·oled·嵌入式软件
小林up2 小时前
【C语言设计模式学习笔记1】面向接口编程/简单工厂模式/多态
c语言·设计模式
破-风2 小时前
linux的用法
linux·运维·服务器
涛ing5 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
__雨夜星辰__5 小时前
Linux 学习笔记__Day2
linux·服务器·笔记·学习·centos 7
大耳朵土土垚5 小时前
【Linux】日志设计模式与实现
linux·运维·设计模式
学问小小谢5 小时前
第26节课:内容安全策略(CSP)—构建安全网页的防御盾
运维·服务器·前端·网络·学习·安全
yaoxin5211236 小时前
第十二章 I 开头的术语
运维·服务器
ProgramHan6 小时前
1992-2025年中国计算机发展状况:服务器、电脑端与移动端的演进
运维·服务器·电脑
厂太_STAB_丝针7 小时前
【自学嵌入式(8)天气时钟:天气模块开发、主函数编写】
c语言·单片机·嵌入式硬件