Shell 小技巧

${} 的使用

截断变量

  1. 去掉左边

    使用 # (最短匹配)或 ## (最长匹配)方法为 ${var#<模式>}

    1. var=DUMMY
    2. echo ${var#*M} # MY
    3. echo ${var##*M} # Y
  2. 去掉右边

    使用 % (最短匹配)或 %% (最长匹配)方法为 ${var%<模式>}

    1. var=DUMMY
    2. echo ${var%M*} # DUM
    3. echo ${var%%M*} # DU

字符串提取

索引从0开始,使用 :<索引> 定位开始和数量,不包含数量时把剩下的全部提取,方法为 ${var:<开始>[:<数量>]}

  1. var=DUMMY
  2. echo ${var:2} # MMY
  3. echo ${var:2:2} # MM

字符串替换

使用 / (第一个)或 // (所有),方法为 ${var/<模式>/<模式>}

  1. var=DUMMY
  2. echo ${var/M/R} # DURMY
  3. echo ${var//M/R} # DURRY

变量默认值

变量的值有3种情形,不存在、存在时空值、存在时非空值,针对其情形使用不同操作返回不同默认值。

符号 含义
`-` 不存在时返回默认值
`:-` 不存在或空值时返回默认值
`+` 存在时返回默认值
`:+` 非空值时返回默认值
`?` 不存在时返回默认值,输出到 `stderr`
`:?` 不存在或空值时返回默认值,输出到 `stderr`
`=` 不存在时返回默认值,并设置变量为默认值
`:=` 不存在或空值时返回默认值,并设置变量为默认值
  1. unset var
  2. echo ${var-"DUMMY"} # DUMMY
  3. set | grep 'var=' || echo Not found # 不存在
  4. var=
  5. echo ${var:-"DUMMY"} # DUMMY
  6. echo ${var} #
  7. var=
  8. echo ${var+"DUMMY"} # DUMMY
  9. echo ${var} #
  10. var=FOO
  11. echo ${var:+"DUMMY"} # DUMMY
  12. echo ${var} # FOO
  13. var=
  14. echo ${var?"DUMMY"} #
  15. var=FOO
  16. echo ${var:?"DUMMY"} # FOO
  17. unset var
  18. echo ${var="DUMMY"} # DUMMY
  19. echo ${var} # DUMMY
  20. var=
  21. echo ${var:="DUMMY"} # DUMMY
  22. echo ${var} # DUMMY

set的使用

set 用于设置 shell 的选项和参数,常用的包括

set -e 出错时马上退出

set -x 跟踪脚本的执行命令

set -- <参数> 把参数作为位置参数

  1. #!/bin/sh
  2. set -e
  3. ARGS=$(getopt -o h -l help -- "$@")
  4. eval set -- "$ARGS"
  5. echo $ARGS

参数处理

使用 getopt 处理脚本的参数, -o 为短参数,-l为长参数,如果参数有值,那么这个参数要加上:,如

  1. set -e
  2. ARGS=$(getopt -o ht:v -l help,tag:,version -- "$@")
  3. eval set -- "$ARGS"

然后,一般使用 while 循环和 case 进行参数的判断

  1. while :; do
  2. case "$1" in
  3. (-h|--help) usage
  4. exit 0
  5. ;;
  6. (-v|--version) echo "0.0.1"
  7. exit 0
  8. ;;
  9. (-t|--tag) shift
  10. TAG=$1
  11. ;;
  12. (--) break
  13. ;;
  14. esac
  15. shift
  16. done
  17. [处理剩下的位置参数]

vi 使用

yy 或 Y 复制当前行
nyy 或 nY 复制当前开始n行
p 粘贴到光标后
P 粘贴到光标前
dd 或 D 剪切当前行
ndd 或 nD 剪切当前开始n行
v+移动光标 选择(然后通过y复制或d剪切)

Shell 小技巧的更多相关文章

  1. 6条shell小技巧,让脚本显得不再业余【转】

    如何能让自己的shell显得不那么业余?下面6点实践一定有用. 画外音:本篇文章源自Google的一篇实践,抽取了部分1分钟能读完的内容,加入了一些分析. 一.以下面的语句开场 set -o noun ...

  2. 日常开发中的shell小技巧

    工具推荐 命令行中很方便的代码统计工具---cloc 强大的分屏工具---tmux 最舒服的markdown书写工具---typora markdown图床推荐--七牛云 模拟生成熵(避免暴力手搓键盘 ...

  3. shell小技巧(7)shell运行调试

    可以在sh内使用set -x,使用后,会打印每条命令的输出 在shell中设置 set -x 开启 set +x 关闭 也可以在执行脚本时加参数 sh -x *.sh

  4. shell小技巧(6)修改一批文件后缀

    当前目录下后缀为sh的文件,改为后缀shell. 这里列出两种方法,先看第一种.方法1:#!/bin/bash str=`find ./ -name \*.sh`  # 会产生一个列表 file=&q ...

  5. Shell 小技巧的问题 mysql -e ,字符串替换telnet命令检测

    api_url= #echo ${api_url/:/ }a #echo `echo $api_url|sed -i 's/:/ /' ` #|sed -i 's/:/ /' ` #sed 'as/: ...

  6. shell小技巧

    # awk '{a[$1]++;a[$2]++}END{for (i in a)print i "\t" a[i]}' list | grep -w 2 | awk '{print ...

  7. mysql写shell小技巧

    set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...

  8. shell小技巧(5)计算当前目录下一级子目录的数量

    方法1: ls -al |grep -E "^d" |grep -v "\.$" |wc -l 详解: -a 列出目录下的所有文件,包含以.开头的隐藏文件: & ...

  9. shell小技巧(4)AIX和Linux计算天前日期

    Linux计算天前日期: date -d "- day" +%Y%m%d AIX计算5天前日期: perl -e "use POSIX qw(strftime); pri ...

随机推荐

  1. include动作标记和include指令标记学习笔记

    我的jsp学习参考书是耿祥义,张跃平编著的jsp大学使用教程这本书,我也向大家推荐这本书,我觉得这本书适合我的学习方式,知识的讲解透彻易懂. include指令标记                   ...

  2. 使用本函式处理后的字串会沿续到PHP程式而转入eval函数

    html码放在数据库里,通过php文件调用,经过一系列处理后,用eval函数 将希望的变量带入生成所需要的动态页.这样,我就没再看vbb源码,而转入eval函数了. 星空浪子的php中文手册是这样介绍 ...

  3. debug阶段工作期站立会议1

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...

  4. Ubuntu 安装 ImageMagic(6.9.1-6)及 PHP 的 imagick (3.0.1)扩展

    关于 ImageMagic 和 imagick 的介绍,见<图片处理神器ImageMagick以及PHP的imagick扩展> 和 <Ubuntu下安装ImageMagick和Mag ...

  5. tmux使用笔记

    tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件. 安装tmux需要先安装依赖包libevent,因为libevent安装在临时位置,所以在编译tmux过程中用到n ...

  6. Win2008R2 zip格式mysql 安装与配置

    一.百度mysql5.6 ZIP 64位免安装版  下载好后 解压到D盘下 二.可以考虑修改my.ini里面的配置   character-set-server=utf8   这句是编码格式设定   ...

  7. thinkphp的save方法失败

    如果用下面的方式更新数据时, $data['link_phone'] = I('post.link_phone'); $flag1 = $order->save ($data); $data一定 ...

  8. android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.

    在当前工程目录中 gradle.properties 添加org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m http://stackoverflow ...

  9. BadgeView的使用介绍

    在现在大部分的信息发布类应用,都有这样的一个功能:当后台数据更新,比如有系统消息或者是用户间有互动的时候,通过在控件上显示一个小红点来提示用户有新的信息.一般来说,这种业务需求,我们可以在布局文件中隐 ...

  10. jframe去掉窗体

    jframe 去掉最大化 怎样去除JFrame上的三个按钮(最大化,最小化,关闭) myjframe.getRootPane().setWindowDecorationStyle(JRootPane. ...