龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

linux学习日记八 认识与学习bash(2)

时间:2014-05-29 02:09来源:网络整理 作者:网络 点击:
分享到:
====bash中的通配符和特殊字符==== 符号 意义 * 代表『 0 个到无穷多个』任意字符 ? 代表『一定有一个』任意字元 [ ] 同样代表『一定有一个在括号內』的字

====bash中的通配符和特殊字符====

符号 意义
* 代表『 0 个到无穷多个』任意字符
? 代表『一定有一个』任意字元
[ ] 同样代表『一定有一个在括号內』的字元(非任意字元)。例如 [abcd] 代表『一定有一个字元, 可能是 a, b, c, d 这四个任何一个』
[ - ] 若有减号在中括号内时,代表『在编码顺序內的所有字元』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ] 若中括号內的第一个字元为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字元,只要是非 a, b, c 的其他字元就接受的意思。

除了通配符之外,bash 環境中的特殊符號有哪些呢?底下我們先汇整一下:

符号 內容
# 注释符号:这个最常被使用在 script 当中,视为说明#在后的语句均不执行
\ 跳脱符号:將『特殊字符或万用字符』还原成一般字元
| 管道 (pipe):分隔两个管道命令的界定(后两节介紹);
; 连续指令下达分隔符:连续性命令的界定 (注意!与管道命令不相同)
~ 使用者的家目录
$ 取用变量前置字元:亦即是变量之前需要加的变量取代值
& 工作控制 (job control):将指令变成背景下工作
! 逻辑运算意义上的『非』 not 的意思!
/ 目录符号,路径分割符号
>, >> 数据流重导向:输出导向,分別是『取代』与『累加』
<, << 数据流重导向:输入导向 (这两个以后说明)
‘ ‘ 单引号,里面全是普通字符,不具备变量置换功能
” “ 具有变量置换的功能!
` ` 两个『 ` 』中间为可以先执行的指令,亦可使用 $( )
( ) 在中间为子 shell 的起始与结束
{ } 在中间为命令区块的組合!

====数据流重导向====

1,标准输入(stdin):代码为0,使用<或者<<

2,标准输出(stdout):代号为1,使用>或者>>

3,标准错误输出(stderr):代号为2,使用2>或者2>>

>表示清空后添加,>>表示累加添加,append的意思。了解?o(╯□╰)o

<表示原本由键盘输入的改由文件输入,而<<则表示遇到后面的字符串的时候结束输入。

/dev/null:超级黑洞,它会吃掉任何导向到它的数据流,很强大的,不是麽。

正确和错误输出到同一个文件的语法格式:

find /home -name .bashrc > list 2>&1

====管道命令====

管道命令需要注意的是:

1,管道命令仅能处理standard output,对于stderr会忽略掉

2,管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行

====选取命令cut和grep====

# cut -d ‘分割字符’  -f  fields <== 用于分割字符

# cut -c 字符范围  <== 用于排列整齐的信息

-d:后面接分割字符,与-f一起使用

-f:依据-d的分割字符将一段信息切割成为数段,用-f取出第几段的意思(-f  3,5)

-c:以字符的单位取出固定字符区间 (-c 12-34)

grep以行为单位分析信息,如果该行符合条件,则把该行提出出来

# grep [-acinv] [--color=auto]  ’查找的字符串’  filename

-a:将binary文件以text文件方式查找

-c:计算找到’查找的字符串’的次数

-i:忽略大小写

-n:顺便输出行号

-v:反向选择,即显示出没有 ‘字符串’内容的那些行

–color=auto : 关键字加上颜色

====排序命令sort,wc,uniq====

# sort  [-fbMnrtuk]  [file  or  stdin]

-f:忽略大小写

-b:忽略最前面的空格

-M:以月份的名字排序

-n:使用数字排序(默认是文字来排序)

-r:反向排序

-u:就是uniq,相同的数据中,仅出现一行代表

-t:分隔符,默认以TAB分割

-k:以那个区间进行排序

# cat /etc/passwd | sort -t “:” -k 3  <== 以第三列进行排序

# last | cut -d ‘ ‘ -f 1 | sort

# uniq [-ic] <==排序完成后将重复的数据仅列出一个显示

-i:忽略大小写

-c:进行计数

# last | cut -d ‘ ‘ -f1 | sort | uniq -ic

# wc [-lwm]  <== 行数,字数,字符数统计命令

-l:仅列出行

-w:仅列出多少字(英文单词word)

-m:多少字符(char)

# cat /etc/man.config | wc

====双向重定向tee====

# tee [-a]  file

-a:以累加(append)方式,将数据加入到file中

# ls -l /home | tee -a ~/homefile | more

====字符转换命令:tr,col,join,paste,expand====

# tr [-ds] SET1 …

-d:删除信息中的SET1这个字符串;

-s:替换掉重复的字符

# last | tr -s ‘[a-z]‘ ‘[A-Z]‘

# cat /etc/passwd | tr -d “:”

# col  [-xb]

-x:将tab键转换成对等的空格键

-b:如果在文字内有反斜杠(\),仅保留反斜杠最后接的字符

# join  [-ti12]  file1 file2

-t:join默认以空格符分割数据,并且对比第一个字段的数据,如果相同,合并到一行,且第一个字段放在第一个

-i:忽略大小写

-1:代表第一个文件要用那个字段来分析

-2:代表第二个文件要用哪个字段来分析

# join -t “:” -1 4 /etc/passwd -2 3 /etc/group

# paste [-d] file1 file2 …

-d:后面可以接分割字符,默认以tab来分割

-:如果-file写成-,则表示来自stdin的数据

# expand [-t] file

-t :后面接数字,表示一个tab键可以转换成几个空格键

# grep ‘^MANPATH’ /etc/man.config  | head  -n 3 | expand -t 6 – | cat -A

====切割命令split==== 

# split [-bl] -file PREFIX

-b:后面接欲切割成的文件的大小,可以加单位,如b,k,m,g等

-l:以行数进行切割

PREFIX:前导符,可作为切割文件的前导文字

# split -b 300k /etc/termcap tercap

====参数代换xargs====

# xargs [-0epn] command

-0:如果输入的stdin含有特殊字符,比如`,\,空格键等,这个参数可以将其还原成一般字符

-e:EOF,后面可以接一个字符串,当xargs遇到这个字符串的时候,就停止继续工作

-p:每次执行命令的参数时,询问用户

-n:后面接次数,每次command执行时,要使用几个参数的意思

# cut -d ‘:’ -f1 /etc/passwd | xargs -p -n 5 finger

使用xargs的原因是:很多命令其实不支持管道命令,因此我们可以通过xargs来提供该命令引用stdin之用。

# find /sbin -perm +7000 | xargs ls -l  <== 找出/sbin下具有特殊权限的文件名

===============END====================

精彩图集

赞助商链接