Linux:可執行程序的Shell傳參格式規範

1. Linux下可執行程序的Shell傳參格式規範

Linux下的可執行程序在運行時經常需要傳一些參數,而這些參數是有規範的。包括我們自己寫的在Linux系統下運行的Shell腳本、Python腳本等可執行程序,最好也遵循相關規範。我們下面以Linux命令為例來講解參數規範:

Linux命令行的格式規範如下:

orion-orion@MyDesktop ~ % command [-options] parameter1 parameter2

上述命令詳細說明如下:

  1. 一行命令中第一個輸入的部分絕對是命令(command)或可執行文件(例如Shell腳本)。
  2. 中括號[]並不存在於實際的命令中,表示該參數是可選的,而加入選項設置時,通常選項前會帶-符號,例如-h;如果要使用選項的完整全名,選項前會帶--符號,例如--help
  3. parameter1parameters2可以為依附在選項後面的參數,也可以為command的參數。
  4. 命令、選項、參數之間以空格來區分,無論空幾格Shell都視為一格,所以空格是很重要的特殊字符。
  5. 命令太長的時候,可使用反斜杠(\)來轉義回車鍵,使命令連續到下一行(注意,換行符屬於特殊字符,而反斜杠後立刻接着特殊字符才能轉義)。

此外,需要注意在Linux系統中英文大小寫字母是不一樣的,例如cd命令和CD並不同。

2. 實例

我們下面舉幾個命令的傳參實例。

ls -al ~

ls為命令名。-al-a -l的簡寫,意為使用-a(列出包括隱藏文件在內的所有文件)與-l(列出文件屬性)這兩個選項。~ls命令的參數,意為家目錄。

tar -xvf test3.zip -C .

tar為命令名。-xv意為使用-x(解壓操作)與-v(可視化解壓過程)這兩個選項。-f意為指定壓縮文件的名稱,後面依附着test3.zip做為該選項的參數。-C意為指定解壓後的目錄,後面依附着.(當前目錄)做為該選項的參數。

注意,-f test3.zip也可以寫成--file test3.zip--file=test3.zip(為--開頭的選項設置參數時都可以使用等號賦值)。

當我們直接在Shell中鍵入man command查看命令操作說明(manual)時,可以看到文檔中對參數格式有詳細描述:

TAR(1)                       General Commands Manual                      TAR(1)

NAME
     tar – manipulate tape archives

SYNOPSIS
     tar [bundled-flags ⟨args⟩] [⟨file⟩ | ⟨pattern⟩ ...]
     tar {-c} [options] [files | directories]
     tar {-r | -u} -f archive-file [options] [files | directories]
     tar {-t | -x} [options] [patterns]

像其他可執行程序(如Git)一般也會遵循類似的傳參規範:

GIT(1)                             Git Manual                             GIT(1)

NAME
       git - the stupid content tracker

SYNOPSIS
       git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--super-prefix=<path>] [--config-env <name>=<envvar>]
           <command> [<args>]

可以看到,git在設置--開頭的選項的參數時就希望我們採用=賦值方式,如--git_dir=/home/domain/.git,這種方式比--git_dir /home/domain/.git更為直觀。

Python腳本的運行也採用類似的傳參風格,如:

python3 search.py -v -p spam --pat=eggs foo.txt bar.txt -o results \
    --speed=fast

具體如何用Python編寫解析命令行選項的程序,我們下一節再展開敘述。

引用

  • [1] 鳥哥. 鳥哥的 Linux 私房菜: 基礎學習篇[M]. 人民郵電出版社, 2018.