第二章 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

results matching ""

    No results matching ""