【Linux】命令行参数

文章目录

  • 前言
  • 一、C语言main函数的参数
  • 二、环境变量
  • 总结


前言

我们在Linux命令行输入命令的时候,一般都会跟上一些参数选项,比如l命令,ls -a -l。以前我总是觉得这是理所当然的,没深究其本质究竟是什么,今天才终于知道其背后原理究竟什么。


一、C语言main函数的参数

大家都知道C语言一定要有main函数,这是一段程序的入口,那既然main也是函数,那也一定有调用,要传参啊。
其实main函数确实被调用了(不过这不是今天的重点),也可以传参
今天就要详细谈一下main函数的参数。

int main(int argc, char *argv[])
{}

不知道大家见没见过这中形式的main函数,没见过也没关系,给大家介绍一下这两个参数。

  • argv:这是一个字符指针数组,其实里面存储的就是命令后面跟着的一个个参数
  • argc:就是指明命令后面跟着几个参数

给大家演示一下:

int main(int argc, char* argv[])
{int i = 0;for(; i < argc; i++ ){printf("%d: %s\n", i, argv[i]);}
}

如上一段程序,功能很简单,就是打印这个argv数组里面的内容。
看一下结果
可以看到其实这个数组里面只有一个元素,即./myproc
在这里插入图片描述
然而,我在运行可执行程序的命令后随便加一些参数,这些参数都会被保存到argv数组中去,被本程序打印出来。
在这里插入图片描述
其实,看到这里大家或许已经明白了。
其实命令本质上是一个可执行程序的名字,用户输入的参数都被保存在argv数组中,程序内通过查看数组的内容来判断执行哪一段代码,进而产生了不同的功能。

例如,可以给大家写一个简易的计算器命令:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char* argv[])
{// 如果输入的的命令不是4个参数,给出提示信息,直接返回if(argc != 4){printf("Use error\nUsage: %s op[-add|sub|mul|div] d1 d2\n", argv[0]); return 1;}// 读取操作数int x = atoi(argv[2]);int y = atoi(argv[3]);int result = 0;// 程序一定有4个命令行参数,第一个是程序名// 判断操作符,以执行不同的功能if(strcmp(argv[1], "-add") == 0){result = x + y;printf("%d+%d=%d\n", x, y, result);}else if(strcmp(argv[1], "-sub") == 0){result = x - y;printf("%d-%d=%d\n", x, y, result);}else if(strcmp(argv[1], "-mul") == 0){result = x * y;printf("%d*%d=%d\n", x, y, result);}else if(strcmp(argv[1], "-div") == 0){if( 0 == y ) printf("%d/%d=error! div zero\n", x, y);else printf("%d/%d=%d\n", x, y, x/y);}else{printf("Use error, you should use right command line\nUsage: %s op[-add|sub|mul|div] d1 d2\n", argv[0]); }
}

运行结果如下:
代码运行结果

二、环境变量

看到这里可能大家还是有疑问,为什么Linux的终端命令不用加./,而我写的却需要呢?
首先,我们要知道,运行一个可执行程序首先需要知道它的位置,所以我们需要指明是当前目录下的某个可执行文件。终端命令同样如此,只不过终端命令有默认位置,每次都会到这个位置去寻找是否有这个可执行程序而已。
这个默认位置其实便是环境变量,终端命令的默认环境变量是PATH,我们可以运行echo $PATH这个命令查看环境变量,例如,
在这里插入图片描述
到这里大家可能已经明白了,想让我们自己写的可执行程序也像命令一样执行,只需要把我们自己写的可执行程序的绝对路径加到PATH后面就可以了,通过执行PATH=$PATH:可执行程序的绝对路径,例如,
在这里插入图片描述


总结

Linux中的的环境变量不止PATH,还有很多其他的一些环境变量,本文就不再赘述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

春秋云镜ED01-CMS v20180505 存在任意文件上传漏洞

靶场介绍 春秋云镜ED01-CMS v20180505 存在任意文件上传漏洞 漏洞分析&#xff1a; 文件类型未校验可以任意上传执行文件&#xff0c;获取服务器权限 登录注册界面 Hi-Lo-Yohttp://eci-2ze2qm1cbaon2lylin0q.cloudeci1.ichunqiu.com/registration.php 注册了几个发现注册不…

【QT】Windows环境下,cmake引入QML

这里使用的QT库为5.7版本。 1、添加环境变量 QT库根目录环境变量 QTDIR QT库平台插件环境变量 QT_PLUGIN_PATH QML支持环境变量 QML2_IMPORT_PATH &#xff08;该环境变量仅在需要使用QML时添加&#xff09; QT库动态库环境变量&#xff0c;bin目录下包含了QT程序运行所需的dl…

跨链原子交换

原子交换的想法于 2013 年首次在 BitcoinTalk 论坛上提出&#xff0c;它可以实现两个区块链之间的代币交换。 这些交换是原子的&#xff0c;因为双方要么收到对方的硬币&#xff0c;要么都保留自己的硬币。 一方不可能欺骗另一方。 它不依赖任何可信赖的第三方&#xff0c;消除…

Hdoop学习笔记(HDP)-Part.10 创建集群

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

【二叉树】常见题目解析(2)

题目1&#xff1a;104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 题目1描述&#xff1a; 题目1分析及解决&#xff1a; &#xff08;1&#xff09;base case&#xff1a;当前节点为null时&#xff0c;以当前节点为根节点的树最大深度是0。 &#xff08;2&…

使用系统ProgressBar实现三色进度条

使用系统ProgressBar实现如图三色进度条&#xff1a; //布局中<ProgressBarandroid:layout_width"0dp"android:layout_height"8dp"android:layout_marginLeft"16dp"app:layout_constraintBottom_toBottomOf"id/photo"app:layout_c…

Docker部署Plik临时文件上传系统并且实现远程访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik8. 结语 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上…

为自己创建的游戏编程源码申请软件著作权详细流程(免费分享模板)

以为我这篇文章制作的游戏申请软件著作权为例 Ren‘py 视觉小说 交互式故事游戏制作过程学习笔记(Windows下实现)(多结局游戏)-CSDN博客 一、网站注册 申请软著时&#xff0c;所有的著作权人都需要在中国版权保护中心官网注册账号&#xff0c;并进行实名认证后&#xff0c;才…

SpringBoot2.x整合WebService实现远程接口调用

一、添加依赖 <!-- SpringBoot 2.4 以下版本--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId> </dependency><dependency><groupId>org.apach…

Android 应用资源概览

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、资源类型分组四、配置限定符名称表…

口罩标准讲解及推荐

一、我国医用口罩质量标准 1、YY/T0969-2013《一次性使用医用口罩》 2、YY0469-2011《医用外科口罩》 3、GB19083-2010《医用防护口罩技术要求》三类医用口罩各项指标对比如下&#xff1a; 结论&#xff1a;防护效果来说&#xff1a;医用防护口罩>医用外科口罩>一次性…

【交换排序 简单选择排序 堆排序 归并排序】

文章目录 交换排序简单选择排序堆排序归并排序 交换排序 冒泡排序的算法分析&#xff1a; 冒泡排序最好的时间复杂度是O&#xff08;n&#xff09;冒泡排序最好的时间复杂度是O&#xff08;n平方&#xff09;冒泡排序平均时间复杂度为O&#xff08;n的平方&#xff09;冒泡排…

02数仓平台Zookeeper

概述 ZooKeeper是一种分布式协调服务&#xff0c;用于管理大型主机集。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑&#xff0c;而不必担心应用程序的分布式性质。 Zookeepe…

基于springboot,vue高校图书馆管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatisredis 本项…

[英语学习][6][Word Power Made Easy]的精读与翻译优化

[序言] 针对第18页的阅读, 进行第二次翻译优化以及纠错, 这次译者的翻译出现的严重问题: 没有考虑时态的变化导致整个翻译跟上下文脱节, 然后又有偷懒的嫌疑, 翻译得很随意. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西,…

2023年12月03日新闻简报(国内国际)

新闻简报 每天三分钟&#xff0c;朝闻天下事。今天是&#xff1a;2023年12月03日&#xff0c;星期日&#xff0c;农历十月廿一&#xff0c;祝工作愉快&#xff0c;身体健康&#xff0c;生活喜乐&#xff1a; &#x1f449;&#x1f449;国内新闻 1、1日凌晨&#xff0c;四川…

OpenCV技术应用(6)— 暖色滤镜和冷色滤镜

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何将一幅图像转化成暖色滤镜和冷色滤镜&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.暖色滤镜 &#x1f680;3.冷色滤…

SpringBoot 是如何启动一个内置的Tomcat

为什么说Spring Boot框架内置Tomcat 容器,Spring Boot框架又是怎么样去启动Tomcat的?我简单总结下学习过程。 一:简单了解SpringBoot的启动类 我们都知道Spring Boot框架的启动类上是需要使用 @SpringBootApplication 注解标注的, @SpringBootApplication 是一个复合注解…

FL Studio(水果软件)2024最新中文版云盘下载

如今&#xff0c;越来越多的音乐人选择使用音乐制作软件来进行音乐的创作&#xff0c;一台电脑、一款软件以及一个外接MIDI就是一个小型的音乐工作站。FL Studio成了音乐界萌新的首选&#xff0c;目前最新的版本为FL Studio2024版本。 你可以不知道如何做音乐&#xff0c;但是…

Normalizing Kalman Filters for Multivariate Time Series Analysis

l l l means latent state&#xff0c;LGM means ‘linear Gaussian state space models’ 辅助信息 作者未提供代码