bash 实用技巧
一..将文件的内容赋给一个变量:
file=$(cat filelist)
file=$(< file)
NOTE:后者性能比前者好
二..bash 分组匹配:
HOSTNAME='mysql-10=='
[root@node2 ~]# [[ $HOSTNAME =~ -([0-9]+)(.*) ]];VAR=${BASH_REMATCH[0]};echo $VAR
-10==
[root@node2 ~]# [[ $HOSTNAME =~ -([0-9]+)(.*) ]];VAR=${BASH_REMATCH[1]};echo $VAR
10
[root@node2 ~]# [[ $HOSTNAME =~ -([0-9]+)(.*) ]];VAR=${BASH_REMATCH[2]};echo $VAR
==
三..命令替换:
1.$(ls)
2.`ls`
四.新开一个子shell执行命令:
(umask 000;mkdir hello;mkdir word)
创建了两个目录,权限都为777
五.set
set -x 以debug模式执行shell,显示执行过程
set -e 如果某一条shell出错就不再往后继续执行
正则表达式:
[[space:]] #空白字符
[[:digit:]] #数字
[[:alnum;]] #数字和字母
[[:punct:]] #标点符号
[[:lower:]] #小写字母
[[:upper:]] #大写字母
[[:alpha:]] #大小写字母
. #匹配单个字符
* #匹配前面字符任意次
.* #匹配任意长度字符,也包含空行
\? #匹配前面字符一次或零次
\{m,n\} #匹配前面字符至少M次,最多n次
\(ab\) #分组匹配,主要用于搭配后项引用,前面匹配到什么,后面就引用什么(eg:grep "\(l..e\).*\1$" test #匹配以括号中匹配到的内容结尾的行)
位置锁定:
^ #行首(如果出现在'[ ]'中,则表示排除,eg grep '[^1-2]' test,表示排除除了1和2的行)
$ #行尾
^$ #空行
\< #词首
\> #词尾
grep参数:
-i #忽略大小写
-n #显示行号
-c #统计符合条件的行
-v #排除符合条件的行
-An #打印符合条件行及下面的n行
-Bn #打印符合条件行及上面的n行
-Cn #打印符合条件的行及上下n行
egrep:
+ #匹配前面字符至少一次
? #匹配前面字符一次或零次
{m,n} #匹配前面字符至少m次,最多n次
(a|b) #匹配a或b
sed:
参数:
-n 静默模式,不再显示模式空间的内容
-i 直接应用在文件中生效,如果不加-i,只是输出到屏幕而不应用到文件
-r 使用扩展正则表达式
-f 保存至文件执行
sed '/hello/a\test' test #在匹配到内容的下一行追加指定内容
sed 's/hello/&test/' test #在匹配到的内容后追加新内容
wd 's/hello/test&/' test #在匹配到的内容前追加新内容
sed '1i\test' passwd #在第一行前面添加test
sed '1a\test' passwd #在第一行后面添加test
sed -n '1'p passwd #打印第一行
sed '1w test' passwd #将第一行内容写到test中
sed '1r test' passwd #将test中的内容添加到第一行后面
sed 's/test/TEST/'g test #将test中的test换位大写的TEST
NOTE:sed中/可以用@或者#代替
eg:
sed 's#test#TEST#'g test
sed 's@test@TEST@'g test
替换字符位置:
#cat test
three one
sed 's/\(three\)\(.*\)\(one\)/\3\2\1/' test
res:
one three
##### bash
: #占位符号
echo $((2**3)) #数值运算
((a=10+10));echo $a #数值运算
(pwd;ls) 与{pwd;ls} 的区别,{} 和()类似,也是将多个命令组合在一起。它们之间的区别是,()是在产生的子shell下执行,而{}是在当前的shell下执行
###echo 后面的内容加引号与不加引号的区别:
echo * #显示当前路径
echo "*" #显示*
linux ps:
ps1:修改默认提示符
ps2:修改分行符号 ##一个非常长的命令可以通过在末尾加“\”使其分行显示。多行命令的默认提示符是“>”。 我们可以通过修改PS2 ,将提示符修改为"continue->"
ps3:修改PS3——Shell脚本中使用select时的提示符
ps4:修改 set -x 脚本调试执行时前面显示的字符
参考连接:https://blog.csdn.net/rainharder/article/details/54573021
将二进制文件嵌入到shell脚本:
有时候我们的项目可以有二进制文件,有图片,有说明文档等,这个时候发布项目可以打成一个包或者一个文件夹有组织的存放这些文件,很方便,但有时候也可以把他们放入到一个shell脚本中,这个对用户也非常友好,只需要运行一个shell脚本就ok:
1.先写一个脚本:test.sh
#!/bin/bash
sed '1,5/d' $0 > test
echo "ok"
chmod +x test
exit 0
END
2.把二进制内容追加到test.sh 后面: cat 二进制文件 >> test.sh
嵌入后的shell:
#!/bin/bash
sed '1,5/d' $0 > test #将第一行至分隔符行删除,将后面二进制分离出来
echo "ok"
chmod +x test
exit 0
END ###分隔符
^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@`ÈF^@^@^@^@^@@^@^@^@^@^@^@^@p^B^@^@^@^@^@^@^@^@^@^@@^@8^@
原理:shell 运行时将对应的二进制分离出来然后执行。
bash 实用技巧的更多相关文章
- Bash实用技巧:同时循环两个列表
摘要: 你会学到一种原创的同时循环两个列表的方法.类似于Python或者Haskell的zip函数,非常简洁直观,效果如下: $ paste <( ) <( ) | while read ...
- Notepad++ 实用技巧
Notepad++是一款开源的文本编辑器,功能强大.很适合用于编辑.注释代码.它支持绝大部分主流的编程语言. 本文主要列举了本人在实际使用中遇到的一些技巧. 快捷键 自定义快捷键 首先,需要知道的是: ...
- javascript实用技巧、javascript高级技巧
字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示
iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端. 打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面. ...
- iOS开发实用技巧—项目新特性页面的处理
iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...
- NSString的八条实用技巧
NSString的八条实用技巧 有一篇文章写了:iOS开发之NSString的几条实用技巧 , 今天这篇,我们讲讲NSString的八条实用技巧.大家可以收藏起来,方便开发随时可以复制粘贴. 0.首字 ...
- ###《VIM实用技巧》
###<VIM实用技巧> #@author: gr #@date: 2015-11-20 #@email: forgerui@gmail.com <VIM实用技巧>阅读笔记. ...
随机推荐
- IDEA 如何搭建maven 安装、下载、配置(图文)
1.下载 maven 压缩包 输入网址 www.apache.org 会看到以下界面 住下划看到以下界面 然后看到这个界面 选择下载这个版本 下载后 解压 maven 压缩包 (文件路径不建议用有中文 ...
- 自定义Shell分隔符
在shell中使用for循环语句时,参数列表有时候需要将空格纳入参数当中,这时就不好使用空格作为分隔符.如下例中,我实际想要输出的是a1.a2.b1.b2以及hello world,但却输出了如下内容 ...
- iOS开发应该知道的7个编程概念
对流行工具(如Xcode)和编程概念(如视图控制器)的高级讨论,这些对iOS开发本身很有用. 1. Xcode Xcode是iOS应用开发社区所见过的最通用的IDE.由于集成开发环境来自Apple,它 ...
- SAP views
文章转自 http://blog.csdn.net/HikenWong/article/details/8263969 1. sap的视图的类型sap的视图的类型有五种: Database views ...
- tp3.2升级tp5需要注意的变化
I方法用input代替:D和M方法没了,需要的话自己封装.C方法没了,需要自己封装,配置文件说明官方文档写的不对,无法使用 Session的使用发生很大变化 模板渲染,控制器传空值会报错 模板内置标签 ...
- Photoshop如何自定义形状
Photoshop如何自定义形状,自定义形状定义一次,可以随便使用,而且形状无大小,填充后不会有像素问题,普通人可把常用的自定义成形状,很方便.PS中有一些自定义的形状,自己可以随便使用,但是不是很全 ...
- [LeetCode] 752. Open the Lock 开锁
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', ...
- Appcrawler 参数实战经验
https://testerhome.com/topics/10574 https://yq.aliyun.com/articles/277985 https://github.com/sevenir ...
- proc 目录介绍
/proc/apm 高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用: /proc/buddyinfo 用于诊断内存碎片问题的相关信息文件: /proc/cmdline 在 ...
- 怎么查看服务器的cpu和内存的硬件信息
在linux 下怎么查看服务器的cpu和内存的硬件信息 可以按照如下方式进行操作: 一.查看cpu总个数方法: 1.首先执行top命令,如下图中内容所表示. 2.在top命令的显示界面,按数字 ...