服務計算3 開發 Linux 命令列實用程式

2021-08-28 22:09:30 字數 2298 閱讀 8023

本次作業參考潘老師的部落格

github傳送門

命令列實用程式開發基礎

本次作業主要是編寫乙個命令列程式,處理標準輸入或者文字檔案。程式的要求主要參考、

對於命令列程式,首先要做的就是解析命令列傳入的引數,例如執行程式

./selpag -s 1 -e 1 input.txt
對於這個命令,我們這個程式應該要至少有三個變數,乙個記錄-s後的1,乙個記錄-e後的1,乙個記錄input.txt。

傳入的引數是命令列程式最重要的東西。解析可以使用os庫里的os.args,但是這很麻煩。

所幸已經有前人幫我們完成解析引數的工作,那就是使用flag或者pflag庫。這兩個庫的使用可以參考

在命令列輸入以下**獲得pflag包,而flag包不用獲取

go get github.com/spf13/pflag
由於老師要求使用pflag,這裡給出pflag簡單的**使用,例如對於intvarp,五個引數分別是,變數的位址,長名,短名,預設值,幫助時的語句。

flag.

intvarp

(&page_len ,

"l",

"l",72,

"page length"

) flag.

boolvarp

(&help ,

"h",

"h",

false

,"show help"

) flag.

stringvarp

(&print_dest ,

"d",

"d","",

"print detination"

)

對於傳入的引數,以下兩種情況是等價的,它們都會把page_len賦值為11。

./selpage -l 11

./selpage -l=11

./selpage --l 11

./selpage --l=11

將變數名和傳入的引數繫結後,使用parse就可以解析了,注意不要忘了,否則忘了解析各變數的值都是預設的。

flag.parse()
對於傳入的前面是『-』的引數,可以用pflag提前繫結好變數,但是這次傳入的檔名引數,前面是沒有『-』的,這裡只要注意 pflag 會把不能解析的引數都放在args()陣列裡面,因此呼叫flag.args()[0]就可以獲得第乙個沒被解析成flag的引數,也就是檔名。

在實現要求中,展示了程式在命令列中搭配』<』 , 『>』 , 『|』 符號的操作,我對命令列的操作並不是太熟悉,開始還很奇怪為什麼輸入之後用pflag解析不了。

後來發現這些符號的效果並不需要我們實現,它們是linux命令列自帶的效果,和『&』符號一樣。

本部分參考

在本次作業中,需要在程式裡執行乙個命令列的命令lp,因此要用到os/exec包,簡要的**如下。

exec.command後面的傳入的引數就是命令列要執行的命令還有引數,例如想執行「cat tmp.txt「,就應該傳入"cat"和 「tmp.txt」,簡單來說就是將空格分開的部分分別寫進去。

然後cmd.stdinpipe()就是lp命令的輸入管道,lp的輸入接受本程式的輸出。

然後後面cmd.start執行命令列程式。

如果3秒後還沒執行完,進行終止。

cmd = exec.

command

("lp"

,"-d"

, print_dest)

fout, err = cmd.

stdinpipe()

if err !=

niloutputfile

(inputfile , fout)

fout.

close()

cmd.stdout = os.stdout

cmd.stderr = os.stderr

err = cmd.

start()

if err !=

nil timer := time.

afterfunc(3

*time.second,

func()

) err = cmd.

wait()

timer.

stop

()

還記得老師布置作業的時候說這次作業很簡單,很快就能寫完,但是在國慶的時候我花了好幾天才寫完,光是文件都看了好久。最主要的問題還是對linux命令列很多東西都不是太熟悉,還有第一次寫go程式也不太熟練的緣故。

Linux服務命令列

linux命令列 方法一 建立全域性可執行指令 ln s home 可執行檔案 usr local bin 重新命名 兩個都必須是絕對路徑 服務開機自啟動 前提 新增全域性可執行指令 chkconfig 服務名 on 若想關閉,將on改為off方法二 建立全域性可執行指令 修改.bash profi...

linux命令列計算器

下面總結linux下的三個命令,來介紹一下linux下的計算方法 1 bc bc在預設的情況下是個互動式的指 令。在bc工作環境下,可以使用以下計算符號 加法 減法 乘法 除法 指數 餘數 一行輸入多個計算,用 相隔 quit 退出 scale 3 設小數字 不進行互動而直接計算出結果 echo s...

Linux命令列(3) pwd 命令

linux中用 pwd 命令來檢視 當前工作目錄 的完整路徑。簡單得說,每當你在終端進行操作時,你都會有乙個當前工作目錄。在不太確定當前位置時,就會使用pwd來判定當前目錄在檔案系統內的確切位置。目錄 1 命令格式 2 命令功能 3 常用引數 4 常用例項 pwd 選項 檢視 當前工作目錄 的完整路...