博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种语言执行入口的传参方法
阅读量:7029 次
发布时间:2019-06-28

本文共 1861 字,大约阅读时间需要 6 分钟。

在操作系统中,执行程序时可以由系统传入参数,就是在执行的时候,附带上参数。比如:

1 ping www.kryptosx.info

后面跟着的网址就是ping的参数。

Linux和windows的shell都遵循这个参数传入方式。这里列一下各种语言的执行入口传参方法。主要分为两类,一种是有main函数的语言,一种是没有main函数的。

在执行命令的时候,linux系统会先对命令行进行分解通常是以空格分解,如果有双引号,双引号内的也是认为是一个参数,无论里面有无空格。

C类语言的执行入口传参:

C类语言包括C和C++语言,他们的传参方式一样。都是在main函数中。C/C++语言中的main函数可以携带参数,只是我们平常不用。

1 int main(int argc, char** argv)
2 int main(int argc, char* argv[])

argc  是指命令行输入参数的个数(以空白符分隔),程序名也是包含在内的。

argv  是一个指向字符串数组的指针。

c/c++main函数传参示例程序:

01 #include <stdio.h>
02 int main(int argc, char ** argv)
03 {
04     printf("argc: %d\n",argc);
05     int i;
06     for (i=0; i < argc; i++)
07         printf("argv[%d] is %s\n", i, argv[i]);
08     getchar();
09     return 0;
10 }

 c/c++main函数传参的执行:

1 play.exe a b c d "hello sir"
2 argc: 6
3 argv[0] is play.exe
4 argv[1] is a
5 argv[2] is b
6 argv[3] is c
7 argv[4] is d
8 argv[5] is hello sir

可以看出,传给argv的字符串中,argc是整个输入的命令被分解的段数(注意双引号)。

Shell脚本的执行入口传参:

shell脚本是没有main函数的,它是个解释性语言。但是我们也可以在运行时对其传参。相对C语言而言,更为简单。

shell是使用系统定义的位置变量。引用脚本参数时,可以使用$1到$9这9个变量。还有一个特殊点的变量是$*,它输出所有参数(不包括程序名)。

shell脚本传参的示例程序:

1 #!/bin/bash
2 echo "\$* is "$*
3 echo "\$0 is "$0
4 echo "\$1 is "$1
5 echo "\$2 is "$2
6 echo "\$3 is "$3
7 echo "\$4 is "$4

shell脚本传参示例的执行:

1 bash hello.sh 1 2 3 4
2 $* is 1 2 3 4
3 $0 is hello.sh
4 $1 is 1
5 $2 is 2
6 $3 is 3
7 $4 is 4

 Python脚本的执行入口传参:

Python是一个介于shell和C/C++之间的语言,它的执行入口传参有二者的特点。和shell一样python也是没有main函数的,但是python和c/c++类似有一个argv变量。python要传参还需要一个sys模块。

  • 需要模块:sys
  • 参数个数:len(sys.argv)
  • 脚本名: sys.argv[0]
  • 参数1: sys.argv[1]
  • 参数2: sys.argv[2]
  • ………..

python脚本传参示例:

1 #coding=utf-8
2 import sys
3 print "sys.argv[0] is ", sys.argv[0]
4 for in range(1len(sys.argv)):
5     print "sys.argv["+str(i)+"] is ", sys.argv[i]

 python脚本传参示例的执行:

1 python hello.py 2324 3 2 3 "sads sdaf"
2 sys.argv[0] is  hello.py
3 sys.argv[1] is  2324
4 sys.argv[2] is  3
5 sys.argv[3] is  2
6 sys.argv[4] is  3
7 sys.argv[5] is  sads sdaf

转载请注明: » 

你可能感兴趣的文章
五、Dart 关键字
查看>>
React Native学习笔记(一)附视频教学
查看>>
记Promise得一些API
查看>>
javascript事件之调整大小(resize)事件
查看>>
20145234黄斐《Java程序设计》第六周学习总结
查看>>
【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)...
查看>>
hibernate 和 mybatis区别
查看>>
互联网广告综述之点击率特征工程
查看>>
HDU3421 Max Sum II【序列处理】
查看>>
POJ NOI MATH-7653 地球人口承载力估计
查看>>
iOS UI高级之网络编程(HTTP协议)
查看>>
使用cocoaPods import导入时没有提示的解决办法
查看>>
iOS数据持久化存储之归档NSKeyedArchiver
查看>>
JavaScript面向对象
查看>>
Intellij修改模板代码
查看>>
2.页面布局示例笔记
查看>>
一些老游戏CPU 100%占用的解决方法
查看>>
f5基本介绍
查看>>
博前语
查看>>
Java SE核心之一:常用类,包装类,其他基本数据类型包装类。
查看>>