如何解决在Bash中解析文件
我正在尝试解析一个.dat文件,该文件为清理脚本设置了参数。
当前.dat文件:
trim_dir.dat 格式Directory_Name | Days_Old |递归| Delete_Directory | Prefix | Log_File
/testing/bash/folder1|7|Y|N||
/testing/bash/folder2|8|Y|Y||
当前脚本: Trim_Dir.sh
#!/bin/bash
# Trim Dir Finalization
# Let's Create a logging function to use
Log()
message=${1}
echo "${message}\n" | tee -a ${log_file}
}
# Let's parse each line of input in a function
parse_input_line()
local parameters=${1}
local param_array=()
# Change IFS so we can loop using '|' as the delimiter
IFS='|'
for parameter in ${parameters}; do
param_array+=(parameter)
done
IFS=${OIFS}
dir_name=${param_array[0]} # required,cannot have default
days_old=${param_array[1]} # default value 0
recursive=${param_array[2]} # default 'N'
delete_dir=${param_array[3]} # default 'N'
prefix=${param_array[4]} # default ''
log_file=${param_array[5]} # default default_log_file
if [[ -z ${log_file} ]]; then
log_file=${default_log_file}
fi
echo ${dir_name}
echo ${days_old}
echo ${recursive}
echo ${delete_dir}
echo ${prefix}
echo ${log_file}
}
#TODO
validate_parameters()
if ! [[ -d "${dir_name}" ]]
then
log "Please provide a Valid Directory"
skip_line=true
fi
re='^[0-9]+$'
if ! [[ ${days_old} =~ ${re} ]] && [[ ${days_old} > 0 ]]
then
log "Days Old is not a valid number"
skip_line=true
fi
}
Process_Directories()
{
for line in $(echo ${dir_list}); do
parse_input_line ${line}
skip_line=false
validate_parameters
if [[ skip_line ]]
then
continue
fi
if [[ ${recursive} == Y ]]
then
find ${dir_name} -type f -mtime +${days_old} -name "${prefix}*" -print0 2>${log_file} | xargs -r0 rm -- 2>${log_file}
if [[ ${delete_dir} == Y ]]
then
find ${dir_name} -mindepth1 -type d -empty -delete 2>${log_file}
fi
else
find ${dir_name} -mindepth1 -maxdepth1 -type f -mtime +${days_old} -name "${prefix}*" -print0 2>${log_file} | xargs -r0 rm -- 2>${log_file}
fi
done
}
OIFS=${IFS}
# Set some defaults
timestamp=$(date --date="now" +"%Y%m%d%H%M")
default_log_file="/tmp/trim_dir.${timestamp}.log" # /tmp/trim_dir.MMDDHHMMSS.log
dir_list=${1}
Process_Directories
不幸的是,我得到的只是输出的参数,在此我回显了变量。这就是我遇到的问题... dir_list正在接受传递给脚本的参数,并将其用作参数。
这是我在服务器中使用的命令。
./ Trim_Dir.sh trim_dir.dat
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。