服務計算:CLI 命令行實用程序開發基礎

CLI 命令行實用程序開發基礎

1.設計說明

我們這次的任務是開發一個CLI命令行實用程序,CLI(Command Line Interface)實用程序是Linux下應用開發的基礎。正確的編寫命令行程序讓應用與操作系統融爲一體,
通過shell或script使得應用獲得最大的靈活性與開發效率
上面這一段是作業網站告訴我們的關於我們本次作業的內容,更通俗一點的解釋就是一個類似於shell的東西,往裏面輸入一個命令,就會得到相應的結果,比如,輸入-ls,就會顯示當前目錄下的文件,不過我們這次要完成的目標如下

該實用程序從標準輸入或從作爲命令行參數給出的文件名讀取文本輸入。它允許用戶指定來自該輸入並隨後將被輸出的頁面範圍。例如,如果輸入含有 100 頁,則用戶可指定只打印第 35 至 65 頁。這種特性有實際價值,因爲在打印機上打印選定的頁面避免了浪費紙張。另一個示例是,原始文件很大而且以前已打印過,但某些頁面由於打印機卡住或其它原因而沒有被正確打印。在這樣的情況下,則可用該工具來只打印需要打印的頁面

所以我們本次作業的目的可以簡單概括爲用命令行來控制所打印的文本,因爲我們需要對命令行進行操作,所以我們需要在Golang環境下處理命令行,這裏面用到了flag包,我在這裏使用的是pflag,下載操作如下:

go get github.com/spf13/pflag

flag包是一個命令行參數的解析工具,用法的話我在做的過程中參考了以下幾篇博客
go語言學習-flag包的使用

golang flag包使用筆記
其實整個流程就是我們在一個flag.XXXVar()語句裏面將變量,所對應的命令行參數,以及默認值與對這個變量的說明綁定在一起
我們第一步要做的事解析我們所要輸入的命令
首先先定義一個結構體,來表明我們將要進行操作的參數
在這裏插入圖片描述
六個變量的作用依次如下
start_page:開始的頁面
end_page:結束的頁面
in_filename string:用於輸入的文件名
print_dest string:用於輸出的文件名
page_len: 每頁的行數(在這裏默認爲72)
page_type string: 打印的模式,'l’按行打印,'f’按換頁符打印

然後我們將這些變量綁定在flag上,然後設置Usage,最後通過Parse()函數來進行解析
在這裏插入圖片描述
接下來就是對一些異常的情況進行處理

在這裏插入圖片描述
首先是對參數的個數進行判斷,如果參數小於3,則一定有問題
其次對第一個位置和第三個位置的參數進行檢查,若都一個參數不是“-s”或第三個參數不是“-e”,則錯誤
因爲命令格式如下 -s (start_page) -e (end_page)
第二個參數是開始頁面,第四個參數是終止頁面
至於第零個參數,是下面這個東西
在這裏插入圖片描述
接下來是對開始頁面和結束頁面進行判斷
如果開始/結束頁面小於1或大於最大頁面(在這裏我設置成了99999999),則出現錯誤
如果結束頁面比開始頁面還要小,則也出現錯誤
接着是對頁面長度進行判斷,小於1或者大於最大頁面,都是有錯誤的
如果還有剩餘的參數的話,一定是作爲輸入的文件名,檢查這個文件是否存在,若不存在,則報錯

對命令行參數的解析至此可以告一段落了
接下來就是對輸入輸出進行操作
在這個程序裏面,輸入可以直接在終端使用輸入流進行輸入,也可以通過文件來進行輸入
在這裏插入圖片描述
如果這個作爲輸入的文件的文件名字存在,那麼就打開這個文件,若文件爲空,則報錯,並最終關閉文件,否則,輸入則按照標準輸入流來進行輸入

而輸出則可以通過文件輸出,也可以通過管道進行輸出或是直接輸出到屏幕上面
在這裏插入圖片描述
以上主要是用來設置輸出地點的函數,通過使用cmd來確定輸出的地點在哪裏

最後是設置打印的模式,-l(按行來打印)-f(按分頁符打印),具體操作分別如下
在這裏插入圖片描述
在這裏插入圖片描述

2.使用與測試

因爲這裏面測試數據我只設置了10行,所以若是不出現錯誤的話,開始和結尾頁碼都是1,設置報錯信息的話另說
test.txt爲包含了測試數據的文件,這裏用作輸入文件
test1.txt爲空白文件,這裏用作輸出文件
error.txt爲空白文件,用於輸出報錯信息

-s 1 -e 1 test.txt
將test.txt的信息輸出到屏幕上
在這裏插入圖片描述

-s 1 -e 1 <test.txt
將test.txt第一頁的內容輸出到屏幕上
在這裏插入圖片描述

-s 1 -e 1 test.txt >test1.txt
將test的內容輸出到test1中
在這裏插入圖片描述
執行後的test1
在這裏插入圖片描述

-s 1 -e 5 test.txt 2>error.txt
將test的內容輸出到屏幕上,報錯的信息則輸出到error中
這裏面我設置的是輸出第1頁-第5頁,但是整個文件就只有一頁,所以錯誤出現在這裏
在這裏插入圖片描述
在這裏插入圖片描述
-s 1 -e 5 test.txt >test1.txt 2>error.txt
將test的信息輸出到test1中,錯誤信息輸出到error.txt
錯誤信息同上
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

-s 1 -e 1 test.txt >/dev/null
什麼也不輸出
在這裏插入圖片描述

-s 1 -e 1 test.txt | wc
輸出行數,單詞數以及字節數
在這裏插入圖片描述
-s 1 -e 1 -l 5 test.txt
輸出5行
在這裏插入圖片描述

-s 1 -e 1 -f test.txt
按照分頁符來輸出
在這裏插入圖片描述

-s 1 -e 1 -d test1.txt test.txt
將test的內容輸出到test1裏面去
在這裏插入圖片描述
在這裏插入圖片描述

cat test.txt | -s 1 -e 1
連接test.txt並打印到標準輸出設備上(在這裏是屏幕)在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章