shell脚本一个分享,直接粘贴过来
来源:互联网 发布:传智播客刘意java视频 编辑:程序博客网 时间:2024/06/04 01:33
Shell是什么?
程序开发语言,分为两种,一种是解释型语言,一种是编译型语言。解释型语言是解释语句,并且能根据流程控制机制让语句按需执行,解释一条语句就返回语句的结果,这种语言需要一个解释器,而linux中的bash就是这样的一个解释器,常见的解释型语言有perl,python,ruby,bash。编译型语言,首先需要编译源程序,并且能够将源程序转换为二进制格式,而后让其执行,这种语言需要一个编辑器,如linux下的gcc就是一个编辑器,编译型语言有C,C++,C#等。
一:来点猛料
1)用好history
① !!,!-1,Ctrl+p:最近一次的输入② ! n,:执行历史记录编号为n的记录③ Ctrl+r:进入历史命令搜索模式④ !Command:执行最近的Command命令 !Command:p 仅打印不执行⑤ !$/!*:上一条命令的最后一个/所有参数,有:p,等于Emacs下的Alt+.⑥ !Command:n:获取最近command命令的第n个参数,最后一个用$,有:p⑦ ^cp:删除上一条命令的cp,无:p ^cp^cd:将上一条命令的第一个cp替换为cd ^cp^cd^: 将上一条命令的所有cp替换为cd① HISTCONTROL:ignoredups,erasedups 忽略命令行模式配置② HISTSIZE:设置历史记录的数量③ HISTTIMEFORMAT:设置历史记录显示时间的模式(%F%D,%Y%m%d%H%M%S)
2)启动vi模式
①像使用vi一样使用
只需要简单一步,就可以把命令行输入行变成vi编辑器,当然,只能使用vi编辑器里面的单行编辑命令。
set -o vi
再按下Esc,
移动:bB,eE,wW,^$,
删除:xX,c[n]w,c[n]b,c[n]e,dd,cc,
回退和修改:Uu,Rr
3)启动变态的Emacs模式
①移动光标快捷键
ctrl+f 向前移动一个字符ctrl+b 向后移动一个字符alt+f 向前移动一个单词alt+b 向后移动一个单词ctrl+a 移动到当前行首ctrl+e 移动到当前行尾ctrl+l 清屏,并在屏幕最上面开始一个新行
②编辑命令行快捷键
ctrl+d 删除当前的字符ctrl+t 交换当前字符和前一个字符的位置alt+t 交换当前单词和前一个单词的位置alt+u 把当前单词变成大写alt+l 把当前单词变成小写alt+c 把当前单词变成首字母大写的单词ctrl+v 添加一个特殊字符,例如,要添加一个制表符,按ctrl+v+tab
③剪切、粘贴快捷键
ctrl+k 剪切文本直到行的末尾ctrl+u 剪切文本直到行的起始ctrl+w 剪切光标前的单词alt+d 剪切光标后的单词ctrl+y 粘贴最近剪切的文本alt+y 回退到先前剪切的文本并粘贴它ctrl+c 删除整行
二:一些常用命令
1)查找
①whereis:找命令在哪里②locate:=find -name,快,放在本地数据库, 每天更新,updatedb立即更新数据库②locate:=find -name,快,放在本地数据库, 每天更新,updatedb立即更新数据库③find:强大的找文件命令-name $find . -name 'my*' -size $find . -size +10000000c +/-:大/小于,c是byte-amin $find . -amin -1 -and -size -10c 1分钟内被访问过且小于10byte的文件amin访问过,mmin修改过,cmin文件状态改变过;amin,mmin,cmin精确到分钟,mtime, mtime,ctime精确到天;在5分钟之内的用-5,在5分钟以上的用+5;-and/-or,交集/并集
④grep:强大的找文件内容命令-i:不区分大小写,默认区分大小写,-l:只列出匹配的文件名-L:列出不匹配的文件名-r:递归查找; -c:该文件匹配个数-n:匹配出现的行数-w:只匹配整个单词,而不是字符串的一部分-C number:匹配的上下文分别显示number行\<,\>:分别标注单词的开始与结尾 ^,$:指匹配的字符串在行首,行尾
2)处理和展示文本
①cut:简单的截取-b:按照byte截取-c:按照char截取-f:按照field域截取,默认是分割符是tab -d " "指定分割符为" " -s不包括那些不含分隔符的行(这样有利于 去掉注释和标题)$cut -f 1-1 -d " " -s uniq.txt$echo hello world|cut -c 1-2指定范围:n-m,n到m;-m,开始到m;n-,n到结束
②sed:强大的行编辑器 sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等$sed "s/m/y/g" a.txt > b.txt (-i直接修改) 匹配规则可以直接用正则表达式,如:^,$,/<,/>,.,*,[] 如果冲突了/可以用其他符号代替$sed "s/m/y/g" a.txt > b.txt$sed "3,6s/m/y/g" a.txt > b.txt 替换3到6行$sed "s/m/y/1" a.txt 替换第一个,g:所有$sed "s/m/y/1;s/y/m/2" a.txt 联合使用$sed "s/m/&y/1" a.txt &指被匹配的m$sed 's/This is my \([^,]*\),.*is \(.*\)/\1:\2/g' my.txt 圆括号匹配N: 把下一行的内容纳入当成缓冲区做匹配。$sed 'N;s/\n/,/' a.txt 把两行合并成一行$sed 'N;s/m/,/' a.txt 把两行中第一个m替换a,i,c,d,p:append,insert,change,delete,打印行$sed "/my/a ----" a.txt 匹配的行插入----$sed "2 c ----" a.txt 修改第二行$sed "2,$c ----" a.txt 修改第二行到最后一行$sed -n "/my/p" a.txt 只打印匹配的行[address[,address]][!]{cmd} !表示匹配成功不执行命令$sed '/m/,+3s/^/# /g' a.txt 后续连续三行加#$sed '3,6 {/m/{/y/d}}' a.txt 对3行到第6行,匹配/m/成功后,再匹配/y/,成功后执行d命令b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。$sed "/m/n;s/y/1/;:n;" a.txt 有m就跳到n,不执行替换
③awk: 强大的行编辑器和处理,还是一个脚本语言$awk '{print $1}' a.txt 打印第一列,tab分割$awk '{printf "%02s" $1}' a.txt 格式化输出$awk '$1>0 && $2=="m" {print $1}' a.txt 条件$awk '$1>0 && $2=="m" || NR==1' a.txt 表头$0 当前记录(这个变量存放着整个行的内容)$1~$n 当前记录的第n个字段,字段由FS分隔FS输入字段分隔符 默认是空格或TabNF当前记录中的字段个数,就是有多少列NR已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中FNR当前记录数,与NR不同的是,这个值会是各个文件自己的行号RS输入的记录分隔符,默认为换行符OFS输出字段分隔符,默认也是空格ORS输出的记录分隔符,默认为换行符FILENAME当前输入文件的名字$awk '$6 ~ /m/ || NR==1 {print NR,$4}' a.txt$awk '$6 !~ /m/ || NR==1 {print NR,$4}' a.txtawk '{print > $6}' a.txt拆分表单$awk '{print $3,$4>$6}' a.txt拆分,输出指定列$awk 'NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > "1.txt";else if($6 ~ /LISTEN/) print > "2.txt";else print > "3.txt" }' a.txt 嵌套ifsub 匹配第一次出现的字符串,相当于sed 's///'gsub 匹配所有的字符串,相当于 sed 's//g' sub 匹配第一次出现的字符串,相当于sed 's///'gsub 匹配所有的字符串,相当于 sed 's//g' $awk '{sub(/Mac/,"MacOS",$1);print}' a.txt$awk '{gsub(/Mac/,"MacOS",$1);print}' a.txt$awk 'BEGIN{ system("ls -l") }' 可以直接调用系统命令$ls -l *.c *.h |awk '{sum+=$5} END {print sum}' 计算文件大小$awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}' a.txt 统计功能$ps aux | awk 'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'统计功能,使用数组
三 默认规则
$0:脚本自身名称$1:第一个参数,$n第n个参数$@:所有位置参数的列表$*:所有位置参数$#:位置参数的个数-b file 检查文件是否存在且是一个块特殊文件-c file 检查文件是否存在且是一个字符文件-d file 检查file是否存在并且是一个目录-e file 检查文件是否存在-f file 检查文件是否存在并且是一个文件-h file 检查文件存在且为一个符合链接-N file 从文件上一次被读取到现在为止, 文件是否被修改过 -r file 检查文件是否存在并且可读-s file 检查文件是否存在且不为空-t file 文件(描述符)被关联到一个终端设备上, 这个测试选项一般被用来 检测脚本中的stdin([ -t 0 ])或者stdout([ -t 1 ])是否来自于一个终端.-w file 检查文件是否存在且可写-x file 检查文件是否存在且可执行-O file 检查文件是否存在且别当前用户拥有-G file 检查是否存在并且默认组是否为当前用户组f1 -nt f2 文件f1比文件f2新f1 -ot f2 文件f1比文件f2旧f1 -ef f2 文件f1和文件f2是相同文件的硬链接-z $var 字符串为"null", 意思就是字符串长度为零-n $var 字符串不为"null".
额··就这些吧···
- shell脚本一个分享,直接粘贴过来
- Jquery跨域请求(可以直接复制过来粘贴即可)
- 测试一下google doc直接上传截图 粘贴过来的效果
- PHP去掉从word直接粘贴过来的没有用格式的函数
- 一个shell脚本
- 一个shell脚本
- 一个iptables shell脚本
- 一个shell 脚本
- 一个shell脚本例子
- 编辑一个Shell脚本
- shell脚本之创建文件,自动复制粘贴文件
- 分享一个shell for循环+case的脚本(监控程序状态)
- 【Shell脚本学习7】Shell脚本学习指南分享
- 获取shell脚本自身所在目录的Shell脚本分享
- 一个shell脚本调用另外一个脚本
- FckEditor中从word文档粘贴过来的内容在点击确定清除格式后直接清除而不是再弹出从MS WORD粘贴对话框的实现
- FckEditor中从word文档粘贴过来的内容在点击确定清除格式后直接清除而不是再弹出从MS WORD粘贴对话框
- FckEditor中从word文档粘贴过来的内容在点击确定清除格式后直接清除而不是再弹出从MS WORD粘贴对话框
- 双向链表的建立插入删除
- 《黑马程序员》java IO流基本操作(1)
- 浅谈android中的目录结构
- 数据集的语法创建与运用
- 在任意一个Activity中,怎么销毁指定的Activity?
- shell脚本一个分享,直接粘贴过来
- 黑马程序员-Java基础-多线程间通讯
- 十进制数转换为N进制数
- NSData,NSImage,NSDictionary,NSString,NSInteger,Float,NSURL 等等互相转换
- getInputChannelCount错误引起的通话录音无声和无法保存问题
- jsp页面中对时间戳字符串格式化为时间标签
- 一台机器配置多个ip地址时被动响应和主动发起的源ip选择
- poj 1308 图论
- MyEclipse8.5搭建Jbpm4.4开发