CLI 命令行实用程序开发基础

CLI 命令行实用程序开发基础

代码传送门,GoOnline平台

1. 概述

CLI(Command Line Interface)实用程序是Linux下应用开发的基础。正确的编写命令行程序让应用与操作系统融为一体,通过shell或script使得应用获得最大的灵活性与开发效率。Linux提供了cat、ls、copy等命令与操作系统交互;go语言提供一组实用程序完成从编码、编译、库管理、产品发布全过程支持;容器服务如docker、k8s提供了大量实用程序支撑云服务的开发、部署、监控、访问等管理任务;git、npm等都是大家比较熟悉的工具。尽管操作系统与应用系统服务可视化、图形化,但在开发领域,CLI在编程、调试、运维、管理中提供了图形化程序不可替代的灵活性与效率。

2. 基础知识

  • 开发Linux命令行实用程序
  • Linux命令行程序设计

3. 实验过程

(1)首先开发命令行程序避免不了需要解析命令行参数,所以需要下载pflag包(CentOS中使用go get github.com/spf13/pflag)以满足 Unix 命令行规范。因为pflag不提供-flagValue的参数值绑定方法,所以没有严格按照-sNumber、-eNumber的形式设计参数,而是沿用了flag的-flag value-flag= value-flag的绑定方法。

(2)了解flag使用方法,使用在pflag.xxxVarP()函数可以将参数的值绑定到相应变量,通过对相应变量和参数检查,以保证命令合法。
必须含有-sNumber和-eNumber参数,所有参数值不能超过int最大值,需要打开的文件必须存在,必须能够正常读写。

(3)使用io库的WriteCloserReadCloser进行对文件的读写。决定是从文件读取输入还是从键盘读取输入;决定输出到设备还是显示屏。

若没有重定向和管道(pflag.NArg()==1),默认是标准输入输出,若输入有重定向,则从flag接收到的inputFileName将为空,所以让ReadCloser=os.Stdin,从重定向的输入获得输入文件。

若输出没有重定向,将使用-d的参数值,把结果输出到指定文件(cmd.Stdout指向该文件),若文件不存在将创建,否则覆盖写入,或者直接输出到标准输出;若输出有重定向,则-d的参数值将为空,所以让WriteCloser=os.Stdout,从重定向的输出获得文件。

(4) 进行文件读写,将从ReadCloser读取到的内容写入到WriteCloser。使用func NewReader(rd io.Reader) *Reader获得到*bufio.Reader,用于驳接ReadCloser,从文件中按某种方法读取内容,例如ReadLine()、ReadString(),按照页内行类型,若有-f参数,则使用ReadLine(‘\n’)函数读取每一行直到EOF。

4. 实验测试

$ selpg -s1 -e1 input_file

在这里插入图片描述

$ selpg -s1 -e1 < input_file

在这里插入图片描述

$ 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

在这里插入图片描述
CLI 命令行实用程序开发基础_第1张图片

$ selpg -s10 -e20 input_file >/dev/null

在这里插入图片描述
CLI 命令行实用程序开发基础_第2张图片

$ selpg -s10 -e20 input_file | other_command

在这里插入图片描述

$ selpg -s10 -e20 input_file 2>error_file | other_command

在这里插入图片描述
CLI 命令行实用程序开发基础_第3张图片

$ selpg -s10 -e20 -l66 input_file

在这里插入图片描述

$ selpg -s10 -e20 -f input_file

CLI 命令行实用程序开发基础_第4张图片

$ selpg -s10 -e20 -dlp1 input_file

该命令未测试,因为没有准备打印机响应该命令,同时为-d参数绑定的参数值是输出文件路径,无法作为命令执行。

你可能感兴趣的:(计算机操作系统,自然语言)