Shell 小技巧

${} 的使用

截断变量

  1. 去掉左边

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

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

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

     var=DUMMY
    echo ${var%M*} # DUM
    echo ${var%%M*} # DU

字符串提取

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

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

字符串替换

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

var=DUMMY
echo ${var/M/R} # DURMY
echo ${var//M/R} # DURRY

变量默认值

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

符号 含义
`-` 不存在时返回默认值
`:-` 不存在或空值时返回默认值
`+` 存在时返回默认值
`:+` 非空值时返回默认值
`?` 不存在时返回默认值,输出到 `stderr`
`:?` 不存在或空值时返回默认值,输出到 `stderr`
`=` 不存在时返回默认值,并设置变量为默认值
`:=` 不存在或空值时返回默认值,并设置变量为默认值
unset var
echo ${var-"DUMMY"} # DUMMY
set | grep 'var=' || echo Not found # 不存在 var=
echo ${var:-"DUMMY"} # DUMMY
echo ${var} # var=
echo ${var+"DUMMY"} # DUMMY
echo ${var} # var=FOO
echo ${var:+"DUMMY"} # DUMMY
echo ${var} # FOO var=
echo ${var?"DUMMY"} # var=FOO
echo ${var:?"DUMMY"} # FOO unset var
echo ${var="DUMMY"} # DUMMY
echo ${var} # DUMMY var=
echo ${var:="DUMMY"} # DUMMY
echo ${var} # DUMMY

set的使用

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

set -e 出错时马上退出

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

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

#!/bin/sh
set -e
ARGS=$(getopt -o h -l help -- "$@")
eval set -- "$ARGS"
echo $ARGS

参数处理

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

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

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

while :; do
case "$1" in
(-h|--help) usage
exit 0
;;
(-v|--version) echo "0.0.1"
exit 0
;;
(-t|--tag) shift
TAG=$1
;;
(--) break
;;
esac
shift
done [处理剩下的位置参数]

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. salt-ssh使用

    salt-ssh 是 0.17.0 新出现的一个功能,一听这名字就知道它是依赖 ssh 来进行远程命令执行的工具,好处就是你不需要在客户端安装 minion,也不需要安装 master(直接安装 sa ...

  2. hdu 猜数字

    这题的意思是找到最大的n使得m次之内的猜测可以猜到1~n之间的任何值.这里是二分思想的逆过程,1~h个数最多猜测log2(n+1)次(n为奇数),故 n=2^m-1; #include"io ...

  3. 使用SEP禁止客户端修改IP地址 - 飞舞的菜刀 - 51CTO技术博客

    1.首先从注册表中搜寻 IP地址所在的位置,查到几项,此项即可: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Paramete ...

  4. css里设置一个div在顶部固定,不随滚动条滚动而滚动

    <div style="border:1px solid red;position:fixed;top:0px;float:inherit;width:100%">删除 ...

  5. tunnel.p4

    Tunneling: VXLAN and NVGRE (including L2/L3 Gateway), Geneve, GRE and IPinIP /* Copyright 2013-prese ...

  6. 让Win8自动登录免输入密码的小技巧

    按Win+R键,输出“netplwiz”,单击“确定”,弹出“用户帐户”窗口.将第一个画框上的勾选去掉——应用——弹出自动登录输入你的密码——确定——确定完成.重启看看电脑是不是不用输入密码也可以自动 ...

  7. 看StackOverflow如何用25台服务器撑起5.6亿的月PV

    问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...

  8. MP20 MBO issue summary

    MP3 MBO经验,教训 改名字HGA003_PTOT_01,发现居然闪现进度条,正常情况是不会闪现进度条的,只是改个名字而已,怀疑之前用过这个名字,所以我后来改成HGA003_PTOT_03了. 先 ...

  9. 耦合 Coupling the object-oriented paradigm && data coupling

    Computer Science An Overview _J. Glenn Brookshear _11th Edition 耦 两个人一起耕地 one of the benefits of the ...

  10. JAVA 调用matlab 出错总结

    1.Java:Unsupported major.minor version 51.0 (unable to load class 出现该错误是由于class编译器的JDK版本高于运行期的JDK版本. ...