Shell 小技巧
Shell 小技巧
${}
的使用
截断变量
去掉左边
使用
#
(最短匹配)或##
(最长匹配)方法为${var#<模式>}
var=DUMMY
echo ${var#*M} # MY
echo ${var##*M} # Y
去掉右边
使用
%
(最短匹配)或%%
(最长匹配)方法为${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 小技巧的更多相关文章
- 6条shell小技巧,让脚本显得不再业余【转】
如何能让自己的shell显得不那么业余?下面6点实践一定有用. 画外音:本篇文章源自Google的一篇实践,抽取了部分1分钟能读完的内容,加入了一些分析. 一.以下面的语句开场 set -o noun ...
- 日常开发中的shell小技巧
工具推荐 命令行中很方便的代码统计工具---cloc 强大的分屏工具---tmux 最舒服的markdown书写工具---typora markdown图床推荐--七牛云 模拟生成熵(避免暴力手搓键盘 ...
- shell小技巧(7)shell运行调试
可以在sh内使用set -x,使用后,会打印每条命令的输出 在shell中设置 set -x 开启 set +x 关闭 也可以在执行脚本时加参数 sh -x *.sh
- shell小技巧(6)修改一批文件后缀
当前目录下后缀为sh的文件,改为后缀shell. 这里列出两种方法,先看第一种.方法1:#!/bin/bash str=`find ./ -name \*.sh` # 会产生一个列表 file=&q ...
- Shell 小技巧的问题 mysql -e ,字符串替换telnet命令检测
api_url= #echo ${api_url/:/ }a #echo `echo $api_url|sed -i 's/:/ /' ` #|sed -i 's/:/ /' ` #sed 'as/: ...
- shell小技巧
# awk '{a[$1]++;a[$2]++}END{for (i in a)print i "\t" a[i]}' list | grep -w 2 | awk '{print ...
- mysql写shell小技巧
set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...
- shell小技巧(5)计算当前目录下一级子目录的数量
方法1: ls -al |grep -E "^d" |grep -v "\.$" |wc -l 详解: -a 列出目录下的所有文件,包含以.开头的隐藏文件: & ...
- shell小技巧(4)AIX和Linux计算天前日期
Linux计算天前日期: date -d "- day" +%Y%m%d AIX计算5天前日期: perl -e "use POSIX qw(strftime); pri ...
随机推荐
- Ubuntu 15.10安装elementary desktop
elementaryOS的风格类似于macos,基于Ubuntu改造,个人比较喜欢其界面理念,简单清晰.因此下载了elementaryOS Freya使用,使用过程中,各个软件版本的升级比较落后,比如 ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...
- Ubuntu安装Flash
第一步:打开视频网站,随意点击一个视频,会提示需要先安装Flash,点击它所提供的链接. 第二步:根据系统选择合适的版本进行下载,有红帽的yum版本,我选择的是tar.gz for other Lin ...
- HTML: 字體設置
針對 font-family 屬性進行詳細設置, 首先我們要瞭解,字體分類: ①無襯線字體: san-serif,一般用於文章標題 ②有襯線字體: serif,一般用在段落處或者非標題部分 當我們設置 ...
- js之操作JSON数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- 关于集合的练习P235-1,2,3
第一题: import java.util.*; public class ListTest { public static void main(String[] args) { ArrayList& ...
- perl常用代码
字符串联结和重复操作符 联接: . 重复:x 联接且赋值(类似+=): .=例: $newstring = "potato" . "head"; $ ...
- spring容器IOC创建对象<二>
问题?spring是如何创建对象的?什么时候创建对象?有几种创建方式?测试对象是单例的还是多例的 ?对象的初始化和销毁? 下面的四大模块IOC的内容了!需要深刻理解 SpringIOC定义:把对象的创 ...
- ubuntu下opencv在Qt中的使用
1. 编译安装OpenCV2.4.9 本博已有文章描述 2. 安装Qt和QtCreator 从qt-project.org 下载Qt安装文件 qt-opensource-linux-x64-5.4. ...
- 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。
今天写ASP.NET程序,在网页后台的c#代码里写了个事务,事务内部对一张表进行批量插入,对另外一张表进行查询与批量插入. 结果第二张表查询后foreach迭代操作时报错:已禁用对分布式事务管理器(M ...