Bash基础特性1

来源:互联网 发布:淘宝搞笑收件人名字 编辑:程序博客网 时间:2024/05/17 05:58

一、globbing

globbing:文件名通配,即用系统定义好的规则代替某一类字符或字符的集合,用来表示文件名。

1.*:匹配任意长度(包括0)的任意字符

例如:列出/etc目录下所有以m开头的文件或目录:

ls -d /etc/m*

2.? :匹配任意单个字符

例如:列出当前目录下所有以pa开头,第三个字符为任意字符的文件或目录:

ls -d pa?

3.[] :匹配指定集合内的任意单个字符

用法:

 [0-9] 任意数字

 [a-z] 任意小写字母

 [A-Z] 任意大写字母

 [0-9a-zA-Z] 任意数字及字母

例如:列出/etc目录下所有以数字开头,小写字母结尾的文件或目录:

ls -d /etc/[0-9]*[a-z]

4.^ :匹配指定集合外的任意单个字符,用于集合[]中,可理解为取反:

例如:列出/etc目录下所有不以字母开头,但以字母结尾的文件或目录:

ls -d /etc/[^a-zA-Z]*[a-zA-Z]

5.字符集合:

 [:space:] 代表所有的空白字符

 [:punct:] 代表所有的标点符号

 [:lower:] 代表所有的小写字母

 [:upper:] 代表所有的大写字母

 [:digit:] 代表所有数字

 [:alpha:] 代表所有字母

 [:alnum:] 代表所有字母和数字

注:上面所描述的字符集合仅表示集合中代表的字符或字母,在实际使用时,应在外再加一个[],表示集合,如[[:alnum:]] 。

练习1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位数字的文件或目录。

ls -d /var/l*[[:digit:]]*[[:lower:]]

中间的[[:digit:]]也可以用[0-9]来专门表示一个字母。

练习2:显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录。

ls -d /etc/[[:digit:]]*[^[:digit:]]


练习3:显示/etc目录下,以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或目录。

ls -d /etc/[^[:alpha:]][[:alpha:]]*

ls /etc/[^a-zA-Z][a-zA-Z]*


练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/m_dir目录中。

先查看目录是否存在,如果不存在的话先创建目录,再执行命令:

cp -r /etc/m*[^0-9] /tmp/m_dir


二、命令行中的常用快捷键

列举几个在命令行编辑时常用的快捷键,不是特别全。

ctrl + a :光标跳转至命令行首部

执行前:

执行后:

ctrl + e :光标跳转至命令行尾部(命令操作相对比较简单,下面就不截图了)

ctrl + l :清屏,作用相当于命令clear

ctrl + c :终止或取消(用ping命令实验)

ctrl + u :删除光标所在位置到命令行首部的所有字符

ctrl + k :删除光标所在位置到命令行尾部的所有字符


三、IO重定向及管道符的使用

我们平时使用的程序都是有输入和输出功能的,通过使用程序的输入功能,得到程序输出的结果。

之前的一些命令基本上都是通过输入目标命令,在屏幕中得到相应的输出结果。

如通过在键盘上输入命令 cat /etc/fstab,得到etc目录下fstab文件中的输出内容:


即使不小心打错一个命令,也会有错误提示的输出:


如果我们不直接将输出的结果显示到屏幕上,而是保存在指定的文件中,这样的功能就叫做重定向。

按照输入和输出的方式,可以分为输出重定向和输入重定向。

1.输出重定向

输出重定向符号:

> :符号后跟文件路径及名称,将输出结果保存在指定文件中,如果指定文件已存在,会覆盖文件的原有内容。

两个文件的原有内容:


下面将test1文件中的内容覆盖到test2文件中:

cat test1 > test2



>> :符号后跟文件路径及名称,将输出结果保存在指定文件中,不会覆盖文件的原有内容,而是追加到最后。

将上例中的test2文件内容再追加到test1文件中:

cat test2 >> test1



由于通过覆盖的方式进行输出重定向操作具有一定的风险,可以使用命令 set -C 禁止使用:



注意此时是在当前的session中控制的,不对其他的session起作用,如果需要的话,需要添加到家目录下的.bash_profile配置文件中。


>| :在禁止的情况下做强制覆盖:



可以通过命令set +C取消对覆盖重定向的限制。


2> :对错误内容输出重定向,覆盖原有文件内容:



2>> :对错误内容输出重定向,追加至文件尾部:



&> :合并正常的标准输出和错误输出至同一个文件,覆盖原有文件内容:



&>> :合并正常的标准输出和错误输出至同一个文件,追加至文件尾部:



还可以关闭对错误信息的显示或输出(当前目录下无test4文件或目录):

ls test1 test4 2>&-

ls test1 test4 2>/dev/null



其中/dev/null可以理解为Linux系统中的黑洞设备,任何信息输入到该设备中均会消失。

2.输入重定向

输入重定向的符号就是把输出重定向的符号反过来,即<、<< 。

通过与EOF命令配合使用,将输入内容显示在屏幕上:


或者将输入的内容重定向到指定文件中:


3.管道符的使用

作用:连接命令,将前一个命令的输出结果作为后一个命令的输入。

语法:COMMAND1 | COMMAND2 | ...

例如:将/etc/passwd文件的前十行内容转换为大写输出:

step1:先将文件的前十行内容显示出来

cat /etc/passwd | head -10


step2:使用tr转换命令


注:tr命令的用法:

作用:字符转换及删除

语法:1.tr '[set1]' '[set2]' 将set1集合里的字符转换为set2里的字符,字符可以是任意的,但是两个集合中的字符个数一定要匹配;

2.tr -d '[set]' 删除set集合中的字符。

例如将小写字母转换为大写字母:



或者将指定字母转换为数字:


删除指定字母:



四、文本查看及处理工具

1.wc命令

作用:显示文件或输入内容的行数、单词数及字节数。

语法:wc [option] FILE ...

常用选项:

-l :行数

-w :单词数

-c :字节数


如果不输入选项 默认以 -l -w -c 的顺序显示:



2.cut命令

作用:对输出结果按一定的规则进行剪切。

语法:cut [option] FILE ...

常用选项:

-d :指定字段分隔符

-f :指定要显示的字段

例如:显示/etc/passwd文件中的所有用户名。

先查看passwd文件内容,发现文件中每行的信息都是以:间隔的,可以划分为7列:



所以指定分隔符为:,只显示第一个字段即可:

cut -d : -f 1 /etc/passwd


3.sort命令

作用:对输入内容进行排序操作。

语法:

sort [option] FILE...

常用选项:

-n :按数值大小进行排序

-r :逆序

-f :忽略字符大小写

-t :指定字段分隔符

-k :指定用于排序的字段

-u :重复的行只保留一次

例如:将/etc/passwd 中的内容按照UID从大到小的顺序进行排列:

按照':'分隔,UID位于第三列:

sort -t : -k 3 -n -r /etc/passwd


4.uniq命令

作用:统计重复行的信息。

语法:uniq [option] FILE...

常用选项:

-c :显示每行出现的次数;

-d :仅显示重复的行;

-u :仅显示不曾重复的行;

创建测试文件repeat,内容如下:


测试各参数的效果:



练习:取出ifconfig命令中eth0的ip地址。

step 1:先取出eth0的IP地址所在的行:

ifconfig | head -2 | tail -1


step 2:按照':' 进行分割,取第二列:

ifconfig | head -2 | tail -1|cut -d : -f 2



step 3:再以空格分割,空格需要用双引号标明:

ifconfig | head -2 | tail -1|cut -d : -f 2|cut -d " " -f 1


0 0