第二章 Shell技巧
类UNIX系统享有最棒的命令行.它们帮助我们完成各类任务,使我们的工作变的轻松.我们经常用到的一些命令是grep awk sed find.
掌控unix/linux命令可谓是一门艺术,实践越多,收益越大.
用cat进行拼接
cat它通常用于读取/显示或者拼接文件内容,不过cat的能力远不止如此,用一行命令将来自标准输入以及文件的数据组合起来.这可是让人头疼的事情.通常的做法是将stdin重定向到一个文件,然后再将两个文件组合到一起.不过我们可以使用cat命令一次性搞定.接下来你会看到cat的基本用法和高级用法.
#打印单个文件的内容
$cat file.txt
#打印多个文件的内容
$cat one.txt two.txt
#摆脱多余的空格
#有时候文本文件中可能包含多处连续的空白行,如果你需要删除这些额外的空白行,使用下面的方法
$cat -s multi.txt
#行号
#使用cat命令的-n选项会在输出的每一行内容之前加上括号.
chu888chu888@ubuntul-dev:~$ cat -n test1.sh
1 #!/bin/bash
2
3 #定义数组
4 array_var=(1 2 3 4 5)
5 array_var1[0]="test1"
6 array_var1[1]="test2"
7
8 #打印数组
9 echo ${array_var[0]}
10 index=1
11 echo ${array_var1[$index]}
12
13 #以清单的形式打印数组
14 echo ${array_var[*]}
15
16 echo ${array_var[@]}
17
18 #打印数组的长度
19 echo ${#array_var[*]}
文件查找与文件列表
find是Unix/linux命令行工具箱中最棒的工具之一.该命令对于编写shell脚本所起到的功用不可小视.
#根据文件名或正则表达式进行搜索
#选项-name的参数指定了文件名所必须匹配的字符串.我们可以将通配符作为参数使用.
#*.txt能够匹配所有以.txt结尾的文件名.
#选项-print在终端中打印出符合条件的结果
$find /home/test -name "*.txt" -print
#find命令有一个选项-iname(忽略字母大小写),该选项的作用和-name一样,只不过在匹配的时候,忽略大小写
$find /home/ -iname "example*" -print
校验与核实
校验程序用来从文件中生成校验和密码,然后利用这个校验和密码核实文件的完整性.文件可以通过网络或任何存储介质分发到不同的地点.出于多种原因,数据有可能在传输过程中丢失若干位,从而导致文件损坏.
因此我们需要采用一些测试方法来确定接受的文件是否有错误.用于文件完整性测试的特定密钥就称为校验值.
计算md5sum,使用下列命令:
chu888chu888@ubuntul-dev:~$ md5sum expect-5.44.1.15-5.el6_4.x86_64.rpm
b51d31ab3f46dc11adab5d87d2f8adb5 expect-5.44.1.15-5.el6_4.x86_64.rpm
chu888chu888@ubuntul-dev:~$
chu888chu888@ubuntul-dev:~$ md5sum expect-5.44.1.15-5.el6_4.x86_64.rpm >file.md5
chu888chu888@ubuntul-dev:~$ more file.md5
b51d31ab3f46dc11adab5d87d2f8adb5 expect-5.44.1.15-5.el6_4.x86_64.rpm
chu888chu888@ubuntul-dev:~$
chu888chu888@ubuntul-dev:~$ md5sum -c file.md5
expect-5.44.1.15-5.el6_4.x86_64.rpm: OK
加密工具与散列
加密技术主要用于防止数据遭受未经授权的访问.加密算法有很多,我们会着重讲解那些常用的标准算法.
crypt是一个简单的加密工具,它从stdin接受一个文件以及口令作为输入,然后将加密数据输出到stdout.
$ sudo apt-get install mcrypt
chu888chu888@ubuntul-dev:~$ crypt <ivy.xml> ivy.xml.crypt
Unix crypt(1) emulation program using mcrypt(1).
Use crypt -h for more help.
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
Stdin was encrypted.
chu888chu888@ubuntul-dev:~$ more ivy.xml.crypt
排序/唯一/重复
sort命令即可以从特定的文件,也可以从stdin中获取输入,并将输出写入stdout.uniq的工作方式和sort一样
$sort file1.txt file2.txt>sorted.txt
#按数字进行排序
$sort -n file.txt
#按逆序进行排序
$sort -r file.txt
#按月份进行排序
$sort -M months.txt