知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

Shell脚本第四篇

发布时间:2014-09-05 14:28:54作者:知识屋

Shell脚本第四篇
 
001
# 文件校验
002
md5sum filename
003
 
004
# 按数组排序
005
sort -n filename.txt
006
 
007
# 按逆序排序
008
sort -r file.txt
009
 
010
# 按月份排序
011
 
012
sort -M file.txt  
013
 
014
# 按月份排序( 按照一月,二月,三月,这样的顺序排序 )
015
 
016
# 判断一个文件是否已经排序
017
#!bin/bash
018
# filename
019
sort -C file;
020
if [ $? -eq 0 ]; then
021
     echo sored
022
else
023
     echo unsored
024
fi
025
 
026
#如果要合并两个排序过的文件
027
sort -m sorted1 sorted2
028
 
029
cat  data.txt
030
1 mac    2000
031
2 winxp  4000
032
3 bsd     1000
033
4 linux   1000
034
#有很多方法对这段文本排序
035
 
036
#执行用哪一列进行排序
037
 
038
sort -nrk 1 data.txt  
039
winxp 4000
040
mac 2000
041
linux 1000
042
bsd 1000
043
 
044
# 依据第一列,以逆序形式排序
045
 
046
#衣服第二列进行排序
047
sork -k 2 data.txt
048
 
049
bsd 1000
050
linux 1000
051
mac 2000
052
winxp 4000
053
 
054
# uniq  去重复字符
055
 
056
cat uniq .txt | uniq
057
 
058
cat uniq.txt | uniq -u  # 只显示未重复过的字符串
059
 
060
cat uniq.txt | uniq -c  #为了统计各行在文件中出现的次数
061
 
062
cat uniq.txt | uniq -d  #找出文件中重复的行
063
 
064
cat data.txt
065
u:01:gnu
066
d:04:linux
067
u:01:bash
068
u:01:back
069
# 我们需要 01, 04 中间的字符串作为唯一的键盘,可以通过忽略前2个字符(-s 2) 并使用-w 选项(-w 2) 指定用于比较的最大字符数的方式来选定该键
070
 
071
sort data.txt | uniq -s 2 -w 2
072
 
073
 
074
uniq -z file.txt  # 用uniq 命令生成包含0值字节的终止字符的输出
075
 
076
uniq -z file.txt | xargs  -0 rm   # 删除所有指定的文件,如果某个文件出现多次,uniq命令只会将这个文件写入stdout一次
077
 
078
# 临时文件名
079
temp_file = "/tmp/var.$$"
080
echo $temp_file;
081
# .$$作为添加的后缀会被扩展成当前脚本的进程ID
082
 
083
# 生成临时测试文件
084
dd if=/dev/zero bs=100k count=1 of=data.file
085
 
086
#分割文件
087
split -b 10k data.file
088
 
089
#分割文件添加前缀名
090
split -b 10k data.file -d -a 4 split_file
091
 
092
#如果不想默认按照数据块还切割
093
split -l 10 data.file 
094
# 分割成多个文件,每个文件10行
095
 
096
# 提取文件扩展名必须借助%
097
file_jpg = "sample.jpg"
098
name=${file_jpg%.*}
099
echo File name Is $name;
100
# ${VAR %.*} 的含义是,删除%右侧的通配符,非贪婪模式
101
# ${VAR%%.*} 从右向左执行贪婪模式匹配
102
 
103
# 借助#操作符号,可以提取文件名中的.jpg
104
jpg=${file_jpg#.*}
105
echo $jpg
106
# ${VAR#.*} 是从$VAR中删除位于#右侧的通配符,通配符从左向右进行匹配
107
# ${VAR##*.}  贪婪模式
108
 
109
# 实现批量重命名shell脚本
110
 
111
#!/bin/bash
112
#filename rename
113
#初始化变量
114
count=1
115
#循环所有文件夹内的jpg文件
116
for img in *.jpg
117
        do
118
                # 生成新文件名
119
                new=image-$count.${img##*.}
120
               #移动文件 2> /dev/null 标准错误指向空,防止打印到终端
121
                mv "$img" "$new" 2> /dev/null
122
              # 如果通配符*.jpg 没有匹配到人和图像文件,那么shell会将通配符接是为字符串。从上面的输出可以看到不存在的.jpg文件,因此
123
              # 如果 mv *.jpg image-x.jpg 肯定会产生错误,if ( $? -eq ] 检查退出状态($?) 如果最近执行的命令没有错误,那么$?的值是0,否则
124
             #  会返回非零值,当mv命令出错时也会返回非0值,防止产生 Renameing file 为空,计数也相加
125
                if [ $? -eq 0 ];
126
                then
127
                        echo "Renameing $img to $new"
128
                        let count++
129
                fi
130
done
131
 
132
将*.JPG 更名卫*.jpg
133
rename *.JPG *.jpg
134
 
135
将文件名中的空格替换为_
136
rename 's/ /_/g' *
137
# 's/ /_/g' 用于替换文件名, 而* 用于匹配文件名的通配符
138
 
139
文件名转换大小写
140
rename 'y/A-Z/a-z/' *
141
rename 'y/a-z/A-Z/ *
142
  
143
为了将mp3文件转移定的目录,可以使用
144
find path  -type f -name "*.mpe" -exec mv {} target_dir /;
145
 
146
将所有的文件名中的空格替换为字符_
147
find path -type f -exec rename '/s /_/g' {} //;
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜