shell初学

136 阅读1分钟

shell初学


当前业务里面有两种形式的音频文件存储格式,一种是在录音根目录下创建游戏英文名文件夹,录音名也以英文为基准;另一种是一些小产品综合热线的录音被放在/电话号码文件夹下面,文件夹下的录音完全按照电话号码来命名。现在为了干掉一部分兼容性代码,把后者全部变成前者的形式,所以需要写一个shell脚本来实现。总结一下需要以下几步:

  • 遍历/电话号码文件夹下的文件,获得文件名,利用正则表达式提取需要处理的文件
  • 查询数据库,获得号码所对应的英文名
  • 字符串切割与拼接,得到新的文件名
  • 检查是否存在新的文件夹,不存在则创建
  • 复制文件到新目录下,并重命名

代码放在下面:

#!/bin/bash#作用的文件夹目录
dir=""
newdir=""
​
HOSTNAME=""
PORT=""
USERNAME=""
PASSWORD=""
DBNAME=""  #数据库名称
TABLENAME="" #数据库中表的名称
​
​
#遍历文件夹下面的文件
for file in $dir/*; do
    
    #获取文件名
    file_name=`basename ${file}`
    #echo ${file_name}
    
    #将文件名匹配正则
    if echo ${file_name} | grep -q "^95163517-[0-9]{3}.*.wav$"
    then
        #号码
        number=${file_name:0:12}
        echo ${number}
​
        #查询数据库得到ename
        QUERY=`mysql -h$HOSTNAME -u$USERNAME -p$PASSWORD << EOF
        use ${DBNAME};
        select ename from ${TABLENAME} where phone='${number}';
        exit
        EOF`
​
        ename=${QUERY:6:${#QUERY}}
        #echo ${ename}
​
        #得到新的文件名
        file_back=${file_name:12:${#file_name}}
        new_filename=${ename}${file_back}
        echo $new_filename      
        
        #检查是否存在文件夹,不存在则创建
        if [ ! -d "${newdir}/${ename}" ]
        then
            mkdir ${newdir}"/"${ename}
        fi
​
        #复制文件并重命名
        echo $file
        `cp ${file} ${newdir}"/"${ename}"/"${new_filename}`
    fi
done

第一次写shell,做一个简单的记录。