前言

我们在使用别的东西的脚本的时候, 经常有这样的操作. cp -rp xxx/ xxx/. 其中-rp是对于原命令的可选项, 可是对于原命令的一个增强. 其实, 这是使用了getopt.


正文

getopt命令 为我们提供了-x(单字母缩写)--name(长单词)这两种选项. 其实, 在我们使用不是需要特别多的选择的时候-x(单字母缩写)完全是够用了.

  • case1 简单例子
    基本使用. 用起来尝尝鲜.
#!/bin/sh
#sh config-env.sh -k $key -t $token
key=
token=
# getopts :k :t 参数
while getopts "k:t:" opt; do  case $opt in  k)  echo "-key = $OPTARG" key=$OPTARG;;t)  echo "-token = $OPTARG" token=$OPTARG;;     \?)  echo "Invalid option: -$OPTARG"   ;;  esac
done echo key${key} token${token}.
# 脚本执行结果
localhost:Desktop Sean$ ./env-config.sh -k hao1123 -t GGG
-key = hao1123
-token = GGG
keyhao1123 tokenGGG.
  • case2 业务逻辑
    在业务的使用过程中, 通常有这样几步(1. 读参数 2. 部分参数read读取 3. 注释配置文件 4. 插入配置文件). 下面我们来实现这个过程.
#!/bin/sh
#sh config-env.sh -k $key -t $token
key=
token=
# getopts :k :t 参数
while getopts "k:t:" opt; do  case $opt in  k)  echo "-key = $OPTARG" key=$OPTARG;;t)  echo "-token = $OPTARG" token=$OPTARG;;     \?)  echo "Invalid option: -$OPTARG"   ;;  esac
done #echo key${key} token${token}.otherconifg=""
otherconifgTmp=""
read -t 300 -p "The otherconfig .(ex: otherconfig=kk): " -r otherconifgTmp ;
if [ "${otherconifgTmp}" != "" ]; thenotherconifg=${otherconifgTmp}echo "otherconifg : ${otherconifg}"
fi# 注意 Mac 上要写成 sed -i '' 's/^demo.key=.*/demo.key='$key'/' xxx/env.properties;
# Linux 上 不用加 ''# 注释
sed -i 's/^demo.key=.*/\#demo.key=/' ../config/application.properties;
sed -i 's/^demo.token=.*/\#demo.token=/' ../config/application.properties;
sed -i 's/^demo.otherconfig=.*/\#demo.otherconfig=/' ../config/application.properties;# 插入
echo "demo.key=$key" >> ../config/application.properties;
echo "demo.token=$token" >> ../config/application.properties;
echo "demo.otherconfig=$otherconfig" >> ../config/application.properties;
# 使用结果
localhost:Desktop Sean$ vi env-config.sh
localhost:Desktop Sean$ ./env-config.sh -k hello -t world
-key = hello
-token = world
The otherconfig .(ex: otherconfig=kk): ggg
otherconifg : ggg
localhost:Desktop Sean$ cat ./config/application.properties
#demo.key=
#demo.token=
#demo.otherconfig=
demo.key=hello
demo.token=world
demo.otherconfig=

需要注意的是, 在sed命令执行时需要判断文件是否存在. 另外, 在Mac上运行sed时需要加上``.(这在脚本的注释内已经指出)


Reference

[1]. Shell 参数(2) --解析命令行参数工具:getopts/getopt
[2]. 选项处理(三)使用 getopt 处理多命令行选项
[3]. getopts命令行参数处理
[4]. 使用getopt命令解析shell脚本的命令行选项
[5]. 使用getopt处理shell脚本的参数

Linux基础之 getopts相关推荐

  1. 干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!

    阿里云   干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾! 1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 ...

  2. Linux基础知识与命令

    目录 一.Shell 1.Shell定义 2.不同的Shell环境 二.Linux命令的分类 1.Shell与内部命令.外部命令 2.help命令可以查看内部命令 3.使用type命令来区分内外部命令 ...

  3. 小猿圈Linux基础面试题,看看你能答对几道?

    最近身边的很多朋友都在学习linux,从最开始的安装软件都需要百度一天的他们,现在已经成长为了,不需要百度就可以把自己弄懵圈的了,接下来的几天小猿圈linux老师会为大家准备一些实用的linux技巧分 ...

  4. linux基础知识-链接列表

    linux基础知识-链接列表 1. 安装centos 7 1.1 Linux的初识 1.2 centOS 7安装教程 1.3 centOS 7配置ip和网络问题排查 1.4 PuTTY和Xshell远 ...

  5. linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp

    linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...

  6. 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...

    本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

  7. linux基础概念和个人笔记总结(6)

    防伪码:曾经梦想仗剑走天涯,回过头,却发现还是放不下家的牵挂 后续理论的验证图文详解,我会更新,希望大家可以参考 第十一章 FTP文件传输服务 1.FTP连接 控制连接:tcp21端口,用于发送ftp ...

  8. Linux基础第一周

    Linux基础第一周 命令的格式 command(命令)option(选项)arguments(参数)三部分组成,之间需要空格间隔 options 选项 启用命令的某项功能,从而更改命令的功能 arg ...

  9. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结

    20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...

最新文章

  1. QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置
  2. CH - 6803 导弹防御塔(二分图最大匹配-多重匹配(拆点法))
  3. mca终端_MCA的完整形式是什么?
  4. UTF8有BOM和无BOM
  5. MFC的六大关键技术
  6. 管理口地址 ibm_WAN口有IP地址上不了网如何解决 WAN口有IP地址上不了网解决方法【详解】...
  7. 阿帕奇链接mysql_apache guacamole 使用mysql 连接
  8. UVA 10765 Doves and bombs 割点
  9. VMware ESXi虚拟机安装Windows7
  10. access用姓名字段统计人数_用Access统计新生数据
  11. VMware开机自启虚拟机系统
  12. JDBC-03:PreparedStatement如何实现对数据库的增删改查操作
  13. 视频去重方法批量处理去重消重去水印去logo软
  14. C程序设计谭浩强版总结笔记
  15. 美团CodeM2018资格赛赛题官方版本详解(二)——可乐
  16. python code mudule,pipe,stdin,stdou,IMPORTANT
  17. mysql的复杂查询
  18. 【Pygame】细致讲解开发Flappy Bird小游戏
  19. 因子分析SPSS数学建模
  20. 数码相机PC端拍照控制软件 PowerVCap V1.0

热门文章

  1. u盘安装Linux全过程,图文讲解用U盘安装Ubuntu Kylin全过程
  2. 25268 Problem E 例题3-5 求一元二次方程的根
  3. 电脑系统重装下载的系统在哪找到
  4. P4735 最大异或和(可持久化字典树 ? 主席树)
  5. word如何设置上标形式_word上标形式
  6. 幸运数字II(二进制问题)
  7. 微软苏州校招1月3日在线编程题1——constellations
  8. python爬虫--爬取9某1看剧网电视剧
  9. 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十三)
  10. 极验第四代滑块验证码破解(四):请求分析及加密参数破解