在操作系统中,执行程序时可以由系统传入参数,就是在执行的时候,附带上参数。比如:
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 i in range ( 1 , len (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 |
转载请注明:旅途@KryptosX » 各种语言执行入口的传参方法