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

来源:https://www.cnblogs.com/orion-orion/archive/2022/05/19/16290123.html
-Advertisement-
Play Games

Linux下的可執行程式在運行時經常需要傳一些參數,而這些參數是有規範的。包括我們自己寫的在Linux系統下運行的Shell腳本、Python腳本等可執行程式,最好也遵循相關規範。我們下麵以Linux命令為例來講解參數規範。 中括弧[]並不存在於實際的命令中,表示該參數是可選的,而加入選項設置時,通... ...


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.
數學是符號的藝術,音樂是上界的語言。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介面轉發調用 問題描述 在開發BI系統的時候,出現了這樣一個不方便的地方。 BI報表所展示的數據是從WMS系統通過API獲取的,而BI系統也有自己的後臺實現了用戶許可權之類的。 那麼現在如果WMS開發了一個新的介面,我就要在BI系統手動寫一個介面,實在很不方便。解決的方法也很簡單,BI系統開發一個AP ...
  • 一個工作了5年的粉絲私信我。 他說自己準備了半年時間,想如螞蟻金服,結果第一面就掛了,非常難過。 問題是: “Redis存線上程安全問題嗎?” 關於這個問題,看看普通人和高手的回答。 普通人: 嗯。。。。。。。。。。。。 高手: 好的,關於這個問題,我從兩個方面來回答。 第一個,從Redis 服務端 ...
  • 前言 是的,小李(化名)上班戴耳機被新來的技術總監批了。。 事情是這樣的,本來小李所在的公司也沒有規定上班時間不能戴耳機寫代碼,之前都戴的好好的,某次開技術會議,時間到了,小李沒有按時間來(也許是寫代碼忘神了),新來的技術總監就站在會議室門口隔空叫他,哪知吼了兩三遍,小李依然無動於衷,他乾脆直接跑過 ...
  • 1.按類匹配:匹配到的Java類中全部方法作為目標連接點,使用within關鍵字。 匹配到某個類 <aop:pointcut expression="within(com.jnvc.ssm.aop.Singer)" id="singerPnt"/> 匹配到當前包下的所有類 <aop:pointcut ...
  • 時間如白駒過隙,恍然間自己畢業已經第5個年頭了。自己沒有聰慧的天資,也沒有出眾的才能,有的只是一路走來的一個又一個腳印,可能有點晚,但是卻不會缺席。(此處應該來一首歌曲——《老男孩》) 2020年,公司因受疫情的影響,入不敷出倒閉了。比自己年長N歲的開發主管說跟著他一起乾,那時自己也正好處於迷茫階段 ...
  • 系列文章 p2p-tunnel 打洞內網穿透系列(一)客戶端配置及打洞 p2p-tunnel 打洞內網穿透系列(二)TCP轉發訪問遠程共用文件夾 p2p-tunnel 打洞內網穿透系列(三)TCP轉發訪問內網web服務,其它服務同理 p2p-tunnel 打洞內網穿透系列(四)socks5代理和ht ...
  • 系列文章 p2p-tunnel 打洞內網穿透系列(一)客戶端配置及打洞 p2p-tunnel 打洞內網穿透系列(二)TCP轉發訪問遠程共用文件夾 p2p-tunnel 打洞內網穿透系列(三)TCP轉發訪問內網web服務,其它服務同理 p2p-tunnel 打洞內網穿透系列(四)socks5代理和ht ...
  • 一、YUM安裝Apache服務的搭建與配置 1、關閉selinux ①修改selinux的配置文件 [root@localhost ~]# vim /etc/selinux/config SELINUX=disabled ②關閉selinux [root@localhost ~]# setenfor ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...