服务计算:使用 golang 开发 开发 Linux 命令行实用程序 中的 selpg
CLI 命令行实用程序开发基础
概述:CLI(Command Line Interface)实用程序是Linux下应用开发的基础。正确的编写命令行程序让应用与操作系统融为一体,通过shell或script使得应用获得最大的灵活性与开发效率。Linux提供了cat、ls、copy等命令与操作系统交互;go语言提供一组实用程序完成从编码、编译、库管理、产品发布全过程支持;容器服务如docker、k8s提供了大量实用程序支撑云服务的开发、部署、监控、访问等管理任务;git、npm等都是大家比较熟悉的工具。尽管操作系统与应用系统服务可视化、图形化,但在开发领域,CLI在编程、调试、运维、管理中提供了图形化程序不可替代的灵活性与效率。
selpg
具体要求与说明: 开发 Linux 命令行实用程序
说明
1. 命令格式
selpg [-s startPage] [-e endPage] [-l linePerPage | -f] [-d dest] input_file >output_file 2>error_file
2. 参数
-s
:startPage,后面接开始读取的页号-e
:endPage,后面接结束读取的页号-l
:后面跟行数,代表多少行分为一页-f
:该标志无参数,代表按照分页符’\f’ 分页,一般默认72行为一页-d
:“-dDestination”选项将选定的页直接发送至打印机,“Destination”应该是 lp 命令“-d”选项可接受的打印目的地名称input_file
,output_file 2
,error_file
:输入文件、输出文件、错误信息文件的名字
(-s和-e是必须的参数,其它为可选参数,-l和-f参数不可能同时出现)
设计
- 导入所需包
package main
import (
"fmt"
"flag"
"os"
"io"
"bufio"
"os/exec"
)
- 定义结构体
type selpg_args struct
{
start_page int
end_page int
in_filename string
page_len int
page_type bool
print_dest string
}
- main函数
func main(){
var args selpg_args
get(&args)
process_args(&args)
process_input(&args)
}
- 实现各个函数的功能
get(&args) //初始化,定义结构体各个变量的值
process_args(&args) //检查输入的命令是否合理有效
process_input(&args) //处理输入的命令
运行使用
使用以下命令
go install github.com/github-user/selpg
selpg [-s startPage] [-e endPage] [-l linePerPage | -f] [-d dest] input_file >output_file 2>error_file
测试结果
按文档 使用 selpg 章节要求测试你的程序
input.txt里面是1到100行的内容分别为1到100的输入文件
- $ selpg -s1 -e1 input_file
一直到72 - $ selpg -s1 -e1 < input_file
也是输出直到72,后面的图片结果省略22到72的图片 - $ other_command | selpg -s10 -e20
- $ selpg -s10 -e20 input_file >output_file
- $ selpg -s10 -e20 input_file 2>error_file
- $ selpg -s10 -e20 input_file >output_file 2>error_file
- $ selpg -s10 -e20 input_file >output_file 2>/dev/null
- $ selpg -s10 -e20 input_file >/dev/null
- $ selpg -s10 -e20 input_file | other_command
- $ selpg -s10 -e20 input_file 2>error_file | other_command
- $ selpg -s10 -e20 -l66 input_file
- $ selpg -s10 -e20 -f input_file
- $ selpg -s10 -e20 -dlp1 input_file
- $ selpg -s10 -e20 input_file > output_file 2>error_file &