CLI 命令列實用程式開發基礎

2021-09-28 01:58:13 字數 3943 閱讀 9431

程式說明

程式測試

go-online位址

應該允許輸入來自以下兩種方式:

$ command input_file
$ command
$ command

< input_file

$ other_command |

command

$ command
$ command

> output_file

$ command

| other_command

-snumber-enumber作為強制選項。

​ selpg 要求使用者用兩個命令列引數-snumber(例如,-s10表示從第 10 頁開始)和-enumber(例如,-e20表示在第 20 頁結束)指定要抽取的頁面範圍的起始頁和結束頁。selpg 對所給的頁號進行合理性檢查;換句話說,它會檢查兩個數字是否為有效的正整數以及結束頁是否不小於起始頁。這兩個選項,-snumber-enumber是強制性的,而且必須是命令列上在命令名 selpg 之後的頭兩個引數。比方說:

$ selpg -s10 -e20 ...
可選選項二:

-ddestination作為可選選項

selpg 還允許使用者使用「ddestination選項將選定的頁直接傳送至印表機。這裡,destination應該是 lp 命令「-d」選項(請參閱「man lp」)可接受的列印目的地名稱。該目的地應該存在 ― selpg 不檢查這一點。在執行了帶「-d」選項的 selpg 命令後,若要驗證該選項是否已生效,請執行命令「lpstat -t」。該命令應該顯示新增到「destination」列印佇列的一項列印作業。如果當前有印表機連線至該目的地並且是啟用的,則印表機應列印該輸出。這一特性是用

popen()系統呼叫實現的,該系統呼叫允許乙個程序開啟到另乙個程序的管道,將管道用於輸出或輸入。在下面的示例中,我們開啟到命令

$ lp -ddestination
的管道以便輸出,並寫至該管道而不是標準輸出:

selpg -s10 -e20 -dlp1
該命令將選定的頁作為列印作業傳送至 lp1 列印目的地。

在slepg.c檔案中,結構體的定義如下所示:

struct selpg_args

;

我們參照其給出的一系列變數,定義新的結構體如下所示:

type selgpargs struct

主要包括開始頁、結束頁、輸入檔案的名字、頁的長度、分頁方式、輸出檔案的名字

引數處理上,我們使用pflag包來解析命令的引數。

首先,我們要在本地安裝:

go get github.com/spf13/pflag
然後進行包的匯入:

)再通過如下步驟進行引數值的繫結。

pflag.

intvarp

(&args.startpage,

"start page"

,"s",0

,"start page of file"

)pflag.

intvarp

(&args.endpage,

"end page"

,"e",0

,"end page of file"

)pflag.

intvarp

(&args.pagelen,

"page length"

,"l",72

,"lines in one page"

)pflag.

strin**arp

(&args.pagetype,

"page type"

,"f"

,"l"

,"flag splits page"

)pflag.

strin**arp

(&args.printdest,

"print destination"

,"d",""

,"name of printer"

)

再呼叫parse()函式讓pflag 對標識和引數進行解析

pflag.

parse

()

補充提示資訊,在usage中定義好幫助函式:

pflag.usage =

func()

對於傳進來的引數,我們也需要判斷是否符合規範,比如數字是否合法、邏輯上是否正確等等。

if

(args.startpage <=

0|| args.endpage <=0)

else

if(args.startpage > args.endpage)

else

if(args.pagelen <=0)

else

if(args.pagetype ==

"f"&& args.pagelen !=72)

要判斷究竟是標準輸入還是檔案輸入,我們就利用我們定義的inputfile變數即可:

if args.inputfile !=

""else

在判斷是標準輸出還是檔案輸出的時候,我們也利用同樣的方式:

if args.printdest ==

""else

然後,再根據arg.pagetype所對應的方式,確定是按照行分頁還是按照分頁符分頁。在兩種不同的方式下,將輸出分別對應輸出到指定位置即可。

測試輸入檔案每行為對應的行序號

CLI 命令列實用程式開發基礎

傳送門,goonline平台 1.概述 cli command line inte ce 實用程式是linux下應用開發的基礎。正確的編寫命令列程式讓應用與作業系統融為一體,通過shell或script使得應用獲得最大的靈活性與開發效率。linux提供了cat ls copy等命令與作業系統互動 g...

CLI 命令列實用程式開發基礎

cli command line inte ce 實用程式是linux下應用開發的基礎。正確的編寫命令列程式讓應用與作業系統融為一體,通過shell或script使得應用獲得最大的靈活性與開發效率。linux提供了cat ls copy等命令與作業系統互動 go語言提供一組實用程式完成從編碼 編譯 ...

CLI命令列實用程式開發基礎

cli 命令列介面 實用程式是linux下應用開發的基礎。正確的編寫命令列程式讓應用與作業系統融為一體,通過shell或指令碼來獲得最大的擴充套件與開發效率。linux提供了cat ls,copy等命令與作業系統互動 go語言提供單個實用程式完成從編碼,編譯,庫管理,產品發布全過程支援 容器服務如d...