在作業系統中,執行程式時可以由系統傳入參數,就是在執行的時候,附帶上參數。比如:
<code>1</code>
<code>ping</code> <code>www.kryptosx.info</code>
後面跟着的網址就是ping的參數。
linux和windows的shell都遵循這個參數傳入方式。這裡列一下各種語言的執行入口傳參方法。主要分為兩類,一種是有main函數的語言,一種是沒有main函數的。
在執行指令的時候,linux系統會先對指令行進行分解。通常是以空格分解,如果有雙引号,雙引号内的也是認為是一個參數,無論裡面有無空格。
c類語言包括c和c++語言,他們的傳參方式一樣。都是在main函數中。c/c++語言中的main函數可以攜帶參數,隻是我們平常不用。
<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code><code>** argv)</code>
<code>2</code>
<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code><code>* argv[])</code>
argc 是指指令行輸入參數的個數(以空白符分隔),程式名也是包含在内的。
argv 是一個指向字元串數組的指針。
<code>01</code>
<code>#include <stdio.h></code>
<code>02</code>
<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code> <code>** argv)</code>
<code>03</code>
<code>{</code>
<code>04</code>
<code> </code><code>printf</code><code>(</code><code>"argc: %d\n"</code><code>,argc);</code>
<code>05</code>
<code> </code><code>int</code> <code>i;</code>
<code>06</code>
<code> </code><code>for</code> <code>(i=0; i < argc; i++)</code>
<code>07</code>
<code> </code><code>printf</code><code>(</code><code>"argv[%d] is %s\n"</code><code>, i, argv[i]);</code>
<code>08</code>
<code> </code><code>getchar</code><code>();</code>
<code>09</code>
<code> </code><code>return</code> <code>0;</code>
<code>10</code>
<code>}</code>
<code>play.exe a b c d </code><code>"hello sir"</code>
<code>argc: 6</code>
<code>3</code>
<code>argv[0] is play.exe</code>
<code>4</code>
<code>argv[1] is a</code>
<code>5</code>
<code>argv[2] is b</code>
<code>6</code>
<code>argv[3] is c</code>
<code>7</code>
<code>argv[4] is d</code>
<code>8</code>
<code>argv[5] is hello sir</code>
可以看出,傳給argv的字元串中,argc是整個輸入的指令被分解的段數(注意雙引号)。
shell腳本是沒有main函數的,它是個解釋性語言。但是我們也可以在運作時對其傳參。相對c語言而言,更為簡單。
shell是使用系統定義的位置變量。引用腳本參數時,可以使用$1到$9這9個變量。還有一個特殊點的變量是$*,它輸出所有參數(不包括程式名)。
<code>#!/bin/bash</code>
<code>echo</code> <code>"\$* is "</code><code>$*</code>
<code>echo</code> <code>"\$0 is "</code><code>$0</code>
<code>echo</code> <code>"\$1 is "</code><code>$1</code>
<code>echo</code> <code>"\$2 is "</code><code>$2</code>
<code>echo</code> <code>"\$3 is "</code><code>$3</code>
<code>echo</code> <code>"\$4 is "</code><code>$4</code>
<code>bash</code> <code>hello.sh 1 2 3 4</code>
<code>$* is 1 2 3 4</code>
<code>$0 is hello.sh</code>
<code>$1 is 1</code>
<code>$2 is 2</code>
<code>$3 is 3</code>
<code>$4 is 4</code>
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]
………..
<code>#coding=utf-8</code>
<code>import</code> <code>sys</code>
<code>print</code> <code>"sys.argv[0] is "</code><code>, sys.argv[</code><code>0</code><code>]</code>
<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, </code><code>len</code><code>(sys.argv)):</code>
<code> </code><code>print</code> <code>"sys.argv["</code><code>+</code><code>str</code><code>(i)</code><code>+</code><code>"] is "</code><code>, sys.argv[i]</code>
<code>python hello.py 2324 3 2 3 </code><code>"sads sdaf"</code>
<code>sys.argv[0] is hello.py</code>
<code>sys.argv[1] is 2324</code>
<code>sys.argv[2] is 3</code>
<code>sys.argv[3] is 2</code>
<code>sys.argv[4] is 3</code>
<code>sys.argv[5] is sads sdaf</code>