服务计算学习之路-CLI 命令行实用程序开发基础

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

概述

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

开发实践

selpg程序逻辑

使用 golang 开发 开发Linux命令行实用程序中的 selpg。selpg 是从文本输入选择页范围的实用程序。该输入可以来自作为最后一个命令行参数指定的文件,在没有给出文件名参数时也可以来自标准输入。

参数处理

强制选项:“-sNumber”和“-eNumber”
selpg 要求用户用两个命令行参数“-sNumber”(例如,“-s10”表示从第 10 页开始)和“-eNumber”(例如,“-e20”表示在第 20 页结束)指定要抽取的页面范围的起始页和结束页。

$ selpg -s10 -e20 ...

可选选项:“-lNumber”和“-f”
selpg 可以处理两种输入文本:

  • 文本的页行数固定。这是缺省类型,如果既没有给出“-lNumber”也没有给出“-f”选项,则 selpg 会理解为页有固定的长度(在我的程序中默认每页 20 行)。
    该缺省值可以用“-lNumber”选项覆盖,如下所示:
$ selpg -s10 -e20 -l66 ...
  • 该类型文本的页由 ASCII 换页字符(十进制数值为 12,在 C 中用“\f”表示)定界。在含有文本的行后面,只需要一个字符 ― 换页 ― 就可以表示该页的结束。
$ selpg -s10 -e20 -f ...

注:“-lNumber”和“-f”选项是互斥的。

可选选项:“-dDestination”
selpg 还允许用户使用“-dDestination”选项将选定的页直接发送至打印机。

$ selpg -s10 -e20 -dlp1

程序实现

1.设置程序的参数结构体。提取参数将值赋值给该结构体

//selpg的参数
type selpg_args struct {
   
   
	start_page  int    //开始页
	end_page    int    //结束页
	in_filename string //作为输入的文件名
	dest        string //输出
	page_len    int    //一页的长度
	page_type   int    //划分页方式
}

var sa selpg_args   //当前输入的参数
var progname string //程序名
var argcount int    //参数个数

2.读取各个参数。使用os.Args读取程序输入的所有参数,得到的值是包含参数的string数组。判断每个参数的格式是否正确,参数个数是否正确以及将参数的值提取出来赋值给结构体

func process_args(args []string) {
   
   
	//参数数量不够
	if len(args) < 3 {
   
   
		fmt.Fprintf(os.Stderr, "%s: not enough arguments\n", progname)
		Usage()
		os.Exit(1)
	}
	//处理第一个参数
	if args[1][0] != '-' || args[1][2] != 's' {
   
   
		fmt.Fprintf(os.Stderr, "%s: 1st arg should be -sstart_page\n", progname)
		Usage()
		os.Exit(1)
	}
	//提取开始页数
	sp, _ := strconv.Atoi(args[1][2:])
	if sp < 1 {
   
   
		fmt.Fprintf(os.Stderr, "%s: invalid start page %d\n", progname, sp)
		Usage()
		os.Exit(1)
	}
	sa.start_page = sp
	//处理第二个参数
	if args
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值