我与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中有效,而环境变量是全局变量,在整个系统中都是可见的。环境变量通常用于设置系统级别的配置,而本地定义的变量用于存储脚本或命令行中的临时数据。

相关推荐
mubeibeinv8 分钟前
项目搭建+图片(添加+图片)
java·服务器·前端
dessler13 分钟前
Docker-如何启动docker
运维·docker·云原生·容器·eureka
zhy2956313 分钟前
【DOCKER】基于DOCKER的服务之DUFS
运维·docker·容器·dufs
无为之士18 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
秋名山小桃子28 分钟前
Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决
运维·服务器
与君共勉1213828 分钟前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
荒古前31 分钟前
龟兔赛跑 PTA
c语言·算法
岑梓铭35 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
努力学习的小廉35 分钟前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei39 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper