现在的位置: 首页 > 综合 > 正文

高级bash编程指南(五)

2013年06月13日 ⁄ 综合 ⁄ 共 3480字 ⁄ 字号 评论关闭

一.内部命令与内建命令

1.内建命令指的是包含在Bash工具包中的命令,从字面上看就是built in,主要是考虑到执行效率的问题。内建命令比外部命令执行的更快,一部分原因是外部命令通常都fork出一个子进程来执行,另一部分原因是特定的内建命令可以直接访问shell的内核部分。

2.值得注意的是一个内建命令通常会与一个系统命令同名,但是Bash内部重新实现了这些命令,但是他们在大多数情况下是一样的

3.关键字就是保留字,具有特殊含义,并用来构建shell语法结构。

4.

(1)echo -n "\v\v\v"  #result: \v\v\v  -n选项不换行

(2)echo -e "\v\v\v"  #result: 3个垂直制表符 -e选项转义

(3)echo $'\v\v\v'  #result: 3个垂直制表符

(4)echo "\"dsfadf\"" #result: “dsfadf” 

(5)echo `ls -l`  #删除"ls -l "命令产生的换行符

(6)echo "sdffs

fdsdaf"  #换行这里加-n中间也会有换行,但是最后没有换行

(7)varr="fdsa

safd"  echo $varr   #换行没了,换成了空格

5.printf可以实现格式化输出

6.read

(1)-a  读取数组变量

(2)不带参数的read将读取的内容存入专用变量$REPLY

(3)输入给read时,输入\,然后回车,将会组织产生一个新行。-r选项会让\转义 

(4)-s 不打印输出 -nN 只接受N个字符 -p读取输入之前打印后边的提示符

read -s n1 -p "Hit a key " keypress ,不用输入回车

(5)方向键的编码

(6)-t指定时间内输入

(7)通过文件重定向来使用read命令

7.set命令

(1)set `uname -a`  #Using set with positional parameters

  echo $1  #`uname -a`结果的第一个字符串

  echo $2   

#`uname -a`结果的第二个字符串

(2)using set with the -- option explicitly assigns the contents of

a variable to the positional parameters.When no variable follow the

-- ,it unsets the positional parameters.

var="one two"

echo "$1"  #one

echo "$2"  #two

8.unset

the unset command deletes a shell variable ,effectively setting it to null.

Note that this command does not affect positional parameters

9.The export command makes availables to all child processes of the running script or shell.Unfortunately,there is no way to export variables back to the parent process,to

the process that called or invoked the script or shell.One import use of the export command is in startup files,to initialize and make accessible environmental variables to subsequent user processes.

10. jobs命令

Lists the jobs running in the background,giving the job number.

 外部过滤器,程序和命令

二 基本命令

1.ls命令的几个选项

-R 递归选项,将会以目录树的形式列出所有文件

-S将会按照文件尺寸列出所有文件

-t修改时间

-i显示文件的inode

-F标记文件类型目录以/结束,文件*

2.cat,tac

-n:所有行前面插入行号

-b:同-n,但是不对空行进行编号

-s:可以把多个空行压缩成一个空行

tac,从文件尾开始显示

3.rev

(1)bash$ cat file1.txt

This is line 1.

This is line 2.

 (2)bash$ tac file1.txt
 This is line 2. This is line 1.

  (3)bash$ rev file1.txt
 .1 enil si sihT .2 enil si sihT

4.mv命令实现重命名功能

5.rm

-f:强制删除文件,即使文件是只读的

删除以“-”开头的文件时 rm ./-filename or rm -- filename

6.ln [-s] oldfile newfile newfile是oldfile的一个链接

-s选项 软链接

硬链接:跟原来文件的inode相同,更改任何文件的内容都会反映到另一个文件。,但是

删除或者重命名一个文件,不会影响另一个文件。

软链接:不同的inode,但是软链接可以链接到不同文件系统的文件,也可以链接到目录。

三 复杂命令

1.find命令 

(1)find ~/ -name '*.txt'

(2)find ~/ -mtime 1  #列出最后一天修改的文件。

(3)find ~/ -name 'core*' -exec rm {}\;  #删除所有core开头的文件

在每一个匹配到的文件执行exec后面的命令,值得注意的是以\;结束。

";"是转义符以保证shell传递到find命令中的字符不会被即使为其他的

字符;如果exec后面的命令中有{},那么find命令将会用所有匹配文件

的路径名来替换{}

2.head和tail命令

head/tail -n Number filename  #显示文件filename的前/后Number行内容

-c N   #显示文件的前后N个字符

tail -f log.txt  #显示文件的后10行文件,自动显示新增的文件内容,尤其在

监控日志时,可以在屏幕上一直显示新增的日志信息。

3.expr命令

(1)expr 3 + 5  #返回8 ,注意空格

(2)expr 3 \* 5  #*需要转义

(3)y=`expr $y + 1` 等价于 let y=y+1 ,y=$(($y+1))

(4)b=`expr $a \> $b`  #测试 ,>,<,>=,<=需要转义

四 文本处理命令

1.sort inputfile|uniq -c|sort -nr

按行排序文件inputfile,去掉重复的行并统计每一行在inputfile中出现的

次数,按数字的反序进行排序。

2.expand 将每一个tab转换为一个空格,unexpand相反

3.wc

wc -w 统计单词数量.

wc -l 统计行数量.

wc -c 统计字节数量.

wc -m 统计字符数量.

wc -L 给出文件中最长行的长度.

4.tr 字符转换过滤器

必须使用引号或中括号,才是合理的。引用可以阻止shell重新解释出现在tr命令中的特殊字符。中括号可以防止被shell扩展。

tr "A-Z" "*" <filename or tr A-Z \* <filename

更通用的做法 tr A-Z '[**]'<filename

五文件与归档命令

1.tar命令

(1)tar -cf 1.tar *.jpg  #将当前目录下的所有.jpg文件打包成1.tar

(2)tar -zf 1.tar  #解开1.tar到当前目录下

(3)tar -czf 1.tar *.jpg  #打包并用gzip压缩,当z换成j时用bzip2压缩

(4)tar -xzf 1.tar  #(3)的逆过程

(5)其他几个有用的选项

tar -tf 1.tar  #里出1.tar中的文件

tar -uf 1.tar logo.jpg  #更新1.tar中的logo.jpg文件

tar -rf 1.tar *.gif  #添加所有的文件到1.tar中去

2.file 确定问加类型

3.which command 确定command的完整路径

4.whereis command 除了给出完整路径,还给出该命令man页的完整路径

5.whatis 列出系统命令和重要配置文件的解释。相当与man命令结果的NAME

项的内容

6.vdir=ls -l

7.locate filename 查询filename的路径

8.readlink  显示符号链接所指向的文件

9.diff 文件比较工具

--side-by-side选项,左右分割形式输出,-c -u选项

patch

cmp命令只会指出那些位置不同,不会显示具体细节

10.basename 去掉路径信息,只输出文件名

dirname 去掉文件名,只输出路径信息

抱歉!评论已关闭.