加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

Shell脚本达成文件遍历和删除操作

发布时间:2021-11-13 12:14:30 所属栏目:教程 来源:互联网
导读:本文需要实现的功能如下:某文件夹下具有由按数字编号命名的文件夹,需要删除除最大编码外的文件。 具体实现 大致思路:循环遍历该文件夹下所有文件,正则匹配出最大编码文件;然后循环文件,删除除最大编码外的文件。 实现代码如下: #!/bin/bash function

本文需要实现的功能如下:某文件夹下具有由按数字编号命名的文件夹,需要删除除最大编码外的文件。
 
具体实现
大致思路:循环遍历该文件夹下所有文件,正则匹配出最大编码文件;然后循环文件,删除除最大编码外的文件。
 
实现代码如下:
 
#!/bin/bash
function getdir(){
    max=0
    DATEPATTERN="^[0-9]*$"
    for element in `ls $1`
    do
        if [[ "$element" =~ $DATEPATTERN ]]
        then
            if [ `expr $max - $element` -lt 0 ]
            then
                max=$element
            fi
        fi
    done
    
    for element in `ls $1`
    do
        if [[ "$element" =~ $DATEPATTERN ]]
        then
            if [ $max != $element ]
            then
                rm -rf element
            fi
 
        fi
    done
}
root_dir="/root/cloud/builds"
getdir $root_dir
 实现效果:文件夹:/root/cloud/builds
 
 
 
执行脚本后:
 
 
 
用到的Shell基本知识
1. 变量
  shell脚本的变量声明通过“=”进行赋值,与C++或java不同,变量名、值与等号不能有空格,否则无法识别该变量。如
 
var=10      
var1="qwert"   
var2='qwert'
 
echo $var  #输出 10
echo $var1 #输出 qwert
echo $var2 #输出 qwert
获取变量中的值,采用“$变量名”格式。
 
2. 字符串
声明字符串可以采用双引号或单引号,但两者有一些区别
 
单引号:1. 单引号中的字符会原样输出,其中的变量不起作用; 2. 单引号中不能使用转义字符,会报错;
 
双引号:1. 可以包含变量并取值;2. 可以包含转义字符
 
#!/bin/bash
a=10
val='hello world $a'
echo "单引号:"$val
 
val='hello 'world' $a'
echo "单引号+单引号 = 拼接:"$val
 
#val='hello 'world' $a'
#echo $val
#报错:/usercode/file.sh: line 9: unexpected EOF while looking for matching `''
 
val="hello 'world' $a"
echo "双引号+单引号 = 输出单引号:"$val
 
val="hello "world" $a"
echo "双引号+双引号 = 拼接:"$val
 
val="hello "world" $a"
echo "双引号+双引号转义字符 = 输出双引号:"$val
 
val="hello "$a"world"
echo "双引号+变量 = 拼接:"$val
 输出结果:
 
单引号:hello world $a
单引号+单引号 = 拼接:hello world $a
双引号+单引号 = 输出单引号:hello 'world' 10
双引号+双引号 = 拼接:hello world 10
双引号+双引号转义字符 = 输出双引号:hello "world" 10
双引号+变量 = 拼接:hello 10world
 字符串拼接问题
 
(1)字符串拼接赋值给变量:双引号或者单引号拼接的时候,如果子字符串完全为纯字符串,之间可以有空格;如果存在变量,则变量与字符串之间不可以有空格;
 
(2)字符串拼接echo输出:可以有空格。如echo "hello" $a 'world'  输出:hello 10 world
 
3. 传递参数
脚本函数获取参数的格式为:$n,n表示第n个参数,如$1表示获取第一个参数,$2表示获取第二个参数。。。。$0表示获取执行脚本名
 
4. 基本运算
原生的bash不能进行简单的数学计算,可以通过命令实现,如awk或expr。
 
各种运算规则可参考:http://www.linuxidc.com/Linux/2017-11/148544.htm
 
本文中运用到的计算包括:减法计算、不等判断、小于判断,如[ `expr $max - $element` -lt 0 ]、[ $max != $element ]
 
5. 流程控制
(1)条件判断:
 
if condition
then
    ......
elif
then
    ......
else
    ......
fi
 (2)for循环
 
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
 具体参考:http://www.linuxidc.com/Linux/2017-11/148530.htm
 
6. 正则表达式
本文中使用的正则表达式为正整数,如"^[0-9]*$",以^开始、$结束,[0-9]标识0到9之间的任意数字,*代表由前边字符0个或以上个字符组成。具体,可参考http://www.linuxidc.com/Linux/2015-08/121238.htm  或相关书籍。
 
判断目标是否匹配正则表达式,采用双方括号和 =~,如 [[ "$element" =~ $DATEPATTERN ]]
 
7. #!/bin/bash
#!为约定标记,告诉系统该脚本需要什么解释器来执行,Linux下默认使用bash,可在 /bin目录下查看到bash文件,如下图:
 
 
 
所有需要执行的shell脚本,都需要将其写在第一行。
 
总结
需要花点时间学习下shell的基本语法和命令。
在shell脚本中使用rm命令的时候,也需要小心,操作不慎可能导致系统挂掉,可看bash脚本中使用rm命令时的致命误区的讲述

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读