目录
周末优化了一下博客,把之前记录经验式的文章集合到这个地方,方便自己和大家查看。
1、判断当前文件是否存在目录或者文件
获取指定目录下的所有文件名
path=/home/data
files=$(ls ${path})
for filename in $files
do
判断文件是不是目录,是就跳过
if [ -d ${path}/$filename ]
then
echo "$fliename是一个目录"
continue
fi
echo "$filename是普通文件"
done
2、判断目录下文件的个数
判断当前目录下的文件个数:
count=`ls | wc -w`
echo $count
判断指定目录下的文件个数:
count=`ls /home/data | wc -w`
echo $count
分析:
| 是管道描述符,将ls /home/data的输出作为wc -w指令的输入
wc 是命令,主要用来计算一个文件的行数、单词数、字符数
-w 表示统计单词数
-l 表示统计行数
-c 表示统计字节数
-m 表示统计字符数
3、对日期进行排序
比如目前有一个名为date的txt文本,里面有一堆时间日期的数据
20180720
20180616
20180415
20180916
20180916
现在我们使用sort命令对它进行排序和去重,并重定向到新文件中
cat date.txt | sort -n | sort -u > new_date.txt
cat new_date.txt
就可以实现对日期的排序,做到按日期先后处理内容了。
解释:
sort -n 表示 排序
sort -u 表示 去重
sort -r 表示 对当前排序取反
sort -o 可以重定向到原文件
sort -r date.txt -o date.txt
4、替换文件内某个字符串
数据库中有些时间的字段为月-日没有年。这将导致今年结束后,明年会出现日期难以对账的问题。为了匹配,可以在脚本中把年份加上去。
sed -i s/'0420'/'20180420'/g `grep '0420' -rl a.sql `
通过这句话,即可将0420替换为20180420
解释:
sed:
-i表示对文件操作,` `表示将grep 的结果作为操作文件
s/'0420'/'20180420'/g 表示将0420替换为20180420
/g表示一行中有多个0420的时候,都替换。没有g的话就是仅替换第一个0420。
grep:
-r 表示查找当前目录和其子目录
-l 表示仅列出符合条件的文件名,传给sed
5、给文件中数据加上引号
给属性加单引号:
ret=`(echo a b c d|sed "s/\w\+/'&'/g")`
echo $ret
输出 'a' 'b' 'c' 'd'
将空格替换为逗号:
ret=`(echo a b c d|sed 's/\s\+/,/g')`
echo $ret
输出 a,b,c,d
将空格替换为逗号的同时给属性加上单引号:
ret=`(echo a b c d|sed 's/\s\+/,/g')|sed "s/\w\+/'&'/g"`
echo $ret
输出'a','b','c','d'
6、shell导出mysql数据表指定行数记录
总结一下shell脚本导出mysql指定行数的方法。
导出(10,‘zf’)的后n条记录:
mysqldump -u $username -p$password $dbname $tbname -w "(id,name)>(10,'zf') limit n";
以上方法的字符类型的记录记得加单引号,而且id需要为自增型。
导出前n条记录:
mysqldump -u $username -p$password $dbname $tbname -w "true limit n";
导出6行到第11行记录:
mysqldump -u $username -p$password $dbname $tbname -w "true limit 5,6";