Shell命令总结
来源:互联网 发布:美国失业率数据 编辑:程序博客网 时间:2024/04/30 16:51
本文主要来源:
<<Shell 脚本学习指>>
http://blog.csdn.net/lile269/article/details/6387553
http://bbs.chinaunix.net/thread-691881-1-1.html
http://wenku.baidu.com/link?url=PefwLPTAQDnP1HLMpJgJhF04kFLbaBj9GFE9D5MYg0pHX8RsxeheHq_DJuZujDq7rK02GtVbtC-FIfllck8yeqm1GLl1LdkY5N2ILA1TO5i
http://blog.sina.com.cn/s/blog_5e77c61f0100hqky.html
http://blog.csdn.net/weekly123/article/details/1465675
http://blog.163.com/xinkang120@126/blog/static/16718749120118251544885/
1. Shell正则表达式
(1)meta字符
POSIX BRE与ERE的meta字符
\ : 关闭后续字符的特殊意义。\(...\)与\{.....\}
. : 匹配任何单个的字符,但NULL除外;
* : 匹配它之前的任何数目(或没有)的单个字符
^ : 匹配紧接着的正则表达式,在行或字符串的起始处。
$ : 匹配前面的正则表达式,在字符串或行结尾处。
[...] : 匹配方括号内的任一字符,连字符(-)指的是连续字符的范围; ^符号置于方括号里第一个字符则有反向含义,指的是匹配不在列表内(方括号内)的任何字符。
BRE仅有的
\{n, m\}: 区间表达式(interval expression),匹配在它前面的单个字符重现的次数区间。
\{n\}指的是重现n次;\{n,\}至少重现n次;\{n, m\}指重现n至m次;
\(\): 将\(与\)间的模式存储在特殊的“保留空间(holding space)”。最多可将9个独立的subpattern存储在单个模
式中。可通过转义序列\1到\9,被重复使用在相同模式里。eg:\(ab\).*\1指的是匹配于ab组合的两次重
现,中间可存在任何数目的字符。
\n: 重复在\(与\)方括号内第n个子模式至此点的模式,n为1至9的数字,1为由左开始
ERE独有的:
{n, m}: 与BRE中的\{n, m\}一样
+ : 匹配前面正则表达式的一个或多个实例
? : 匹配前面正则表达式的零个或一个实例
|: 匹配于|符号前或后的正则表达式
( ): 匹配于方括号括起来的正则表达式群
[: :] : 字符集
[. .] :排序符号
[= =]: 等价字符集
(2)后向引用
(3)文本匹配锚点
(4)BRE运算符优先级、由高至低
(5)ERE运算符优先级、由高至低
(6)正则表达式的扩展
2. Shell中重要的命令用法
(1)grep用法
语法: grep [ options ...] pattern-spec [ files...]
用途:打印出与pattern相匹配的行
选项:
常用选项:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
(2)sed用法
sed '2,$d' file 显示文件,只显示第一行。
sed '/^ *$/d file 删除文件中的空行。
sed -n '5p' file 只显示文件的第5行
sed 's/^...//' file 删除每一行的头三个字符。
sed -n '2,/999/p' file 显示从第2行到匹配行。
sed '/101/w newfile' file 把匹配行写入newfile。
> ###' file 在匹配行后增加一新行。
sed '/101/i\
> ###' file 在匹配行前增加一新行。
sed '/101/c\
> ###' file 用新行替换匹配行。
sed '/101/{ s/moding/moden/g; q; }' file 在文件中找到第一个匹配行后进行替换后再退出。
sed -e '/101/{ h; d; }' -e '/104/{ g; }' file 在文件中找到与101匹配行后先存在一个缓存中,再替代104的匹配行。
sed -e '/101/h' -e '$G' file 将最后一个匹配行放在文件末。
sed -e '/101/h' -e '$g' file 将最后一个匹配行替换文件末行。
sed -e '/101/h' -e '/104/x' file 在文件中找到与101匹配行后先存在一个缓存中,再与104的匹配行进行互换。
cat sfile
/101/a\
####101####\
****101****
/104/c\
####104 deleted####\
****104 deleted****
1i\
####test####\
****test****
(3)cut命令
(4)join命令
(5)awk命令
(6)sort命令
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。
(7)uniq命令
(8)fmt命令
(9)计算行数、字数及字符数
(10)pr命令
(11)提取开头或结尾数行
3. Shell中的语法
(1)变量管理:export与readonly、env
export -p
readonly name[=word] ...
readonly -p
(2)参数展开
用途:如果变量未定义,则返回默认值
eg:若count未定义,则${count: -0}的值为0 ${varname:=word}若varname存在且不是null,则返回它的值;否则,设置它为word
并返回其值;
用途:若变量未定义,则设置变量为默认值
eg:若count未定义,则${count:=0}设置为0${varname:?message}若varname存在且非null,则返回它的值;否则,
显示varname:mesage,并退出当前的命令或脚本
用途:捕捉由于变量未定义所导致的错误
eg:${count:?"undefined!"}将显示count:undefined!
且若count未定义,则退出${varname:+word}若varname存在且非null,则返回word;否则,返回null;
用途:为测试变量的存在
eg:若count已定义,则${count:+1}返回1
并返回剩下的部分。
eg:
${path#/*/}
结果:tolstoy/mem/long.file.name${variable##pattern}若模式匹配于变量值的开头处,则删除匹配的最长部分,
并返回剩下部分
eg:${path##/*/}
结果:long.file.name${variable%pattern}若模式匹配于变量值的结尾处,则删除匹配的最短部分,
并返回剩下的部分
eg: ${path%.*}
结果:/home/tolstoy/men/long.file${variable%%pattern}若模式匹配于变量值的结尾处,则删除匹配的最长部分,
并返回剩下的部分。
eg:${path%%.*}
结果:/home/tolstoy/men/long
当是为处理选项和参数而建立循环时,会很有用。
$*, $@一次表示所有的命令行参数
这两参数可用来把命令行参数
传递给脚本或函数所执行的程序“$*”将所有命令行参数视为单个字符串
等同于”$1 $2 ...“
$IFS的第一个字符用来作分隔字符,以分隔不同的值来建立字符串"$@"将所有命令行参数视为单个的个体
即单独字符串,等同于"$1" "$2" ......
是将参数传递给其他程序的最佳方式,因这会保留
所有内嵌在每个参数里的任何空白
它会设置位置参数的值,并将之前
存在的任何值 丢弃shift用来”截去(lops off)“来自列表的位置
参数,由左开始。
一旦执行shift,则$1的初始值会永远消失,
取而是$2的旧值,$2的值,变成$3的旧值
还可接受一个可选的参数,即可指定一次要移动几位
默认为1
特殊变量
$$变量可在编写脚本时用来建立具有唯一性的文件名(多半是临时的)
算术运算符
与C类似
(3)退出状态
退出的状态值
exit命令
语法 :
exit [ exit- value]
用途:
从Shell脚本 返回一个退出状态给脚本的调用者
行为模式:
若没有提供,则最后一个的执行命令的退出状态作为默认的退出状态。若即为所需,则在Shell脚本里这样写:
exit $?
if-elif-else-fi语句
逻辑的NOT、AND与OR(均属short-cut运算符)
表示逻辑否时的!放在管道(pipeline)前
test命令
test命令可处理Shell脚本里的各类工作,产生的不是一般输出,而是可使用的退出状态。
语法:
test [ expression ]
[ [ expression ] ]
用途:
测试Shell脚本里的条件,通过退出状态返回其结果。特别注意的是:第二种形式中,主括号根据字面意义逐字地输入,且必须与括起来的expression以空白隔开。
行为模式:
test用来测试文件属性、比较字符串及比较数字
(4)case语句
(5)循环
for循环
while与until循环
break与continue
通过结合while、case、break及shift,可做些简单的选项处理
getopts命令用法
语法:
getopts option_spec variable [ arguments ... ]
用途
简化参数处理,并让Shell脚本可轻松地匹配于POSIX参数处理惯例
行为模式
(6)函数
(7)输入/输出、文件与命令执行
Standard I/O
Standard input、Standard output、Standard error
使用read读取行
read命令用法
语法:read [ -r ] variable ...
用途:将信息读入一个或多个Shell变量
主要选项:-r 【原始读取,不作任何处理,不将行结尾处的反斜杠解释为续行字符】
关于重定向
基本的输入输出重定向运算符: <、 >、 >>及|
额外的重定向运算符:
使用set -C搭配,防止文件意外截断的选项;执行set -C命令可打开Shell所谓的禁止覆盖(nocolbber)选项,当它处于打开状态时,单纯的>重定向遇到目标文件已存在时,会失败;>|运算符则可令noclobber选项失效。
提供行输入(inline input)的<<与<<-:
使用program << delimiter,可在Shell脚本正文内提供输入数据,这样的数据叫作嵌入文件(here document)。
printf命令:
语法: printf format-string [arguments ... ]
(8)波浪号展开与通配符
文件名操作:~将用户根目录的符号型表示方式,改为实际的目录路径,可采用直接或间接的方式指定此程序的用户。
*表示所有的文件名
(9)引用
(10)subShell与代码块
subShell:
是一群被括在圆括号里的命令,这些命令会在另外的进程中执行。
当需让一小组的命令在不同的目录下执行时,可用该方法,不必修改主脚本的目录,直接处理这种情况。
4. awk
(1)awk程序模型
(2)标量变量与数组变量
数组变量:包含零到多个数据项,通过紧接着名称的数组索引选定。awk允许在数组名称之后,以方括号将任意数字或字符串表达式括起来作为索引。
(3)记录与字段
在awk程序化模式中,通过输入文件隐含循环的每一次迭代,会处理单一记录(record),通常是一行文本。记录可进一步再分割为更小的字符串,叫做字段(field)。
记录分隔字符(RS):gawk中RS可以是正则表达式,可提供比单一字符还长的长度。
eg:RS = "+"匹配于字面上的一个加号,而RS = ":+"匹配于一个或多个冒号,提供了更强大的规格。
字段分隔字符(FS):字段彼此是被匹配字段分隔字符正则表达式(可在变量FS里取得)的当前字符串值分隔。
字段可以特殊名称$1、$2、$3、....、$NF供awk程序使用,字段引用无须是固定的,可转换(通过截断)为整数值。
特殊字段名称$0引用当前记录,初始值是从输入流中读取,且记录分隔字符不是记录的一部分。引用到0到NF范围以上的字段编号是不会有错的,它们会返回空字符串,且不会建立新字段,除非指定值给它们。
(4)模式与操作
模式:由字符串/或数值表达式构建而成,当计算出当前输入记录的值为非零(真),则实行结合性的操作
(5)语句
连续执行:
条件式执行:
重复执行:
用户控制的输入getline
(6)字符串函数
length(string):用来返回字符串string的长度
子字符串提取:
substr(string, start, len):提取子字符串的函数;
字母大小写转换:
tolower(string):将所有字母改为小写;
toupper(string):将所有字母改为大写;
字符串查找:
index(string,find):查找string里是否有字符串find,返回string里的find字符串的起始位置;若string里找不到find,则返回0;
字符串匹配:
match(string,regexp):将string与正则表达式regexp匹配,若匹配,则返回匹配string的索引,不匹配,则返回0。
字符串替换:
sub(regexp,replacement,target):将target与正则表达式regexp进行匹配,将最左边最长的匹配部分替换为字符串replacement;返替换的数目,若活力第三个参数,则默认值为当前记录$0.
gsub(regexp,replacement,target):与sub有些类似,不过它会替换所有匹配的字符串。
注意:这两个函数的调用过程中,每个replacement里的字符&都会被替换为target中与regexp匹配的文本,使用\&可关闭这一功能,且请刻若要在引号字符串里使用它时,以双反斜杠转义它。
字符串分割
split(string, array, regexp):将string切割为片段,并存储到array里的连续元素。
字符串重建
join():
字符串格式化
sprintf(format, expressoin1, expression2, ... ):会返回已格式化的字符串作为其函数值
- Shell命令总结
- shell命令总结
- Linux Shell 命令总结
- Erlang Shell命令总结
- Linux Shell命令总结
- shell命令总结
- adb shell 命令总结
- Shell命令总结
- 常用shell命令总结
- Linux Shell命令总结
- shell 命令总结
- Shell 命令总结
- shell命令总结
- Shell命令总结
- shell date命令总结
- shell命令总结
- Android shell 命令总结
- shell命令的总结:
- C++实现Http Post请求
- Cocos2d-x 3.1环境搭建和创建工程
- 购买笔记本需要了解的。。。
- 第17周项目4该年第几天
- selenium2.0无法打开浏览器
- Shell命令总结
- 13.Hibernate双向无链表的1-N映射
- 关于WPS中的PPT学习
- LED循环播放节目
- 显示动画,隐式动画、关键帧动画
- C++ Primer 习题11.15分析
- 32位系统与64位系统之自我问答
- onSaveInstanceState()方法使用注意点
- UITableViewCell里UIButton实现push的代理和block