内容预知
3.2 用于windows的编写的脚本格式转换为Linux格式
1.快捷排序——sort
以行为单位,对文件的内容进行排序
格式: sort [选项] 参数
常用选项:
-n | 按照数字的大小进行排序 |
-r | 倒序排序(配合-n使用) |
-u | 相当于下面的那个命令uniq,去重复的行(只保留一行重复内容) |
-t | 指定字段的分隔符 |
-k | 指定排序的字段 |
-o<输出文件> | 另保存输出排序的结果(相当于重定向输出) |
-f | 忽略大小写,把小写字母也当作大写字母看待 |
-b | 忽略每行前面的空格 |
sort -n 和sort -n -r
sort -u
sort -o
2.快捷去重——uniq
uniq命令用于报告或者忽略文件中连续的重复行,常与sort命令结合使用。
格式:
uniq [选项] 参数
cat 文件| uniq 选项
-c | 统计连续重复的行的次数,并且合并重复的行 |
-u | 显示仅出现一次的行(包括不连续的重复行) |
-d | 仅显示重复出现的行(必须是连续的重复行) |
uniq -c
uniq -u
uniq -u
需求:在/var/log/secure中记录着ssh登录的信息(其中也包含着登录失败的消息),我们认为密码输错三次,是一种外界入侵进行破译的过程,此刻写一个相关的脚本对输错三次的ssh登录主机进行禁用(登录禁用的文件在/etc/hosts.deny)
3.快捷替换——tr
常用来对来自标准输入的字符进行替换,压缩,和删除
格式: cat 文件| tr [选项] 参数
-c | 保留字符集1的字符,其他字符包括换行符\n用字符集2替换 |
-d | 删除所有属于字符集1的字符 |
-s | 将连续重复的字符串压缩成一个 |
-t | 字符集2 替换 字符集1,不加选项效果相同 |
默认的基本用法 :
tr-c:
tr -d :
tr -s:
tr -t:
运用:将$PATH中的":"改变为换行
[root@localhost tr]#echo $PATH|tr -s ':' '\n'
拉入一个Windows编写好的shell测试脚本
报错原因:Linux中遇到了换行符(“\n”)会进行回车加换行的操作,回车符反而只会作为控制字符(“^ M”)显示,不发生回车的操作。而windows中要回车加换行符(“\r\n”)才会发生回车加换行的操作,缺少一个控制符,或则顺序不对都不能另一行
解决方案一:
- [root@localhost tr]#cat window.sh |tr -d "\r" >windows
-
- 或则
-
- [root@localhost tr]#cat window.sh |tr -s "\r" "\n" >windows
方法二:
下载格式转换工具:dos2unix
- yum install -y dos2unix
-
- #使用格式
- dos2unix 文件名
4.快速裁剪命令——cut
在之前的博客中有详细讲解
- [root@localhost tr]#i=12345678
- [root@localhost tr]#expr substr $i 1 3
- 123
- [root@localhost tr]#expr substr $i 2 5
- 23456
对字段进行截取和剪裁
格式:
格式一:cut [选项] 参数
格式二:cat file | cut [选项] 参数
-d | 指定分隔符(默认分隔符为Tab) |
-f | 按字段进行截取。指定第n个字段;n-m表示从第n个字段到第m个字段;a,b,c表示第a、第b、第c个字段 |
-b | 以字节为单位进行截取 |
-c | 以字符为单位进行截取 |
–complement | 排除所指定的字段 |
–output-delimiter | 更改输出内容的分隔符 |
[root@localhost tr]#cut -d ':' -f 1-3 /etc/passwd
[root@localhost tr]#head -n 2 /etc/passwd|cut -d ':' --complement -f 2
[root@localhost tr]#head -n 2 /etc/passwd|cut -d ':' -f 1-5 --output-delimiter='@'
5.文件拆分——split
split命令用于在Linux下将大文件拆分为若干小文件。
格式:split 选项 参数 原始文件 拆分后文件名前缀
-l | 指定行数 |
-b | 指定文件的大小 |
[root@localhost tr]#split -l 20 test2.txt sc
6.文件合并——paste
按照字段来进行文件的合并
格式:
paste [选项] 文件1 文件2
-d | 用于指定文件的分隔符(默认情况下为制表符"\n") |
-s | 将列和行的内容进行互相交换 |
运用演示:指定两个文件的第二列进行列合并
- [root@localhost tr]#cat a b
- 1 2 3
- 2 3 4
- 2 1 2
- 4 3 4
- 2 1 3
- 12 1 3
- 12 11 21
- 11 12 34
-
- a b c
- c b a
- d e f
- f d e
- f h j
- g k l
- 1 2 3
- [root@localhost tr]#cat b|awk '{print $2}' >c
- [root@localhost tr]#cat a|awk '{print $2}' >d
- [root@localhost tr]#paste c d
- b 2
- b 3
- e 1
- d 3
- h 1
- k 1
- 2 11
- 12
7.变量扫描器——eval
命令字前加上eval,shell会在执行命令之前扫描它两次,eval命令首先会先扫描命令行进行所有的置换,然后再执行命令,该命令适用于那些一次扫描无法实现功能的变量,该命令会对变量进行两次扫描。
脚本运用测试:
- #!/bin/bash
-
- #这是一个验证eval扫描的脚本
- a=100
- b=a
-
- echo "普通echo输出的变量b的值为:" \$$b
- eval echo "经过eval扫描输出变量b的值为:" \$$b
测试结果: