![逐行读取文件,如果满足条件则继续读取直到结束](https://linux22.com/image/117442/%E9%80%90%E8%A1%8C%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%BB%A1%E8%B6%B3%E6%9D%A1%E4%BB%B6%E5%88%99%E7%BB%A7%E7%BB%AD%E8%AF%BB%E5%8F%96%E7%9B%B4%E5%88%B0%E7%BB%93%E6%9D%9F.png)
我想获取用户提示的日期文件,这些文件位于两个不同的位置和scp
另一台服务器。这就是我到目前为止所做的,我正在努力从文件中读取常量并使用 if condition 进行调节。
- path1 (
/nrtrdepath/
) 有 1 个文件 - 路径2 (
/dcs/arch_05/AUDIT_REPORT/SL_AUDIT_REPORT/
) 2 个文件
所有文件应scp
位于一个位置
更新代码
#=================================
#description :This script will scp user prompted SL audit files to another SCP /tmp/SL_Audit_Report/ path .
#author :Prabash
#date :20170902
#================================
true > /home/cmb/SL__scripts/Prabash/list2.txt
read -p "Enter Date " n
ls -lrt /nrtrdepath/ | awk {'print $9'} | grep AuditReport_SL_nrtrde_$n.csv >> /home/cmb/SL__scripts/Prabash/list2.txt
ls -lrt /dcs/SL_AUDIT_REPORT/ | awk {'print $9'} | grep AuditReport_SL_ICT_$n.csv.gz >> /home/cmb/SL__scripts/Prabash/list2.txt
ls -lrt /dcs/SL_AUDIT_REPORT/ | awk {'print $9'} | grep AuditReport_SL_BI_$n.csv.gz >> /home/cmb/SL__scripts/Prabash/list2.txt
k=`cat /home/cmb/SL__scripts/Prabash/list2.txt`
while IFS= read -r k ; do
if [[ $k == AuditReport_SL_nrtrde* ]] ; then
scp /nrtrdepath/$k [email protected]:/tmp/SL_Audit_Report/
else
for i in $k; do scp /dcs/SL_AUDIT_REPORT/$i [email protected]:/tmp/SL_Audit_Report/
fi
done
答案1
看起来您想要做的是根据日期字符串选择三个文件并将scp
这些文件保存到另一个位置。这可以通过以下方式完成
#!/bin/sh
thedate="$1"
scp "/nrtrdepath/AuditReport_SL_nrtrde_$thedate.csv" \
"/dcs/SL_AUDIT_REPORT/AuditReport_SL_ICT_$thedate.csv.gz" \
"/dcs/SL_AUDIT_REPORT/AuditReport_SL_BI_$thedate.csv.gz" \
[email protected]:/tmp/SL_Audit_Report/
你会运行这个
$ sh ./script "datestring"
其中datestring
是要用作文件名中的日期的字符串。
这是有效的,因为scp
可以将多个文件复制到一个位置,就像cp
.
通过一些错误检查:
#!/bin/sh
thedate="$1"
if [ ! -f "/nrtrdepath/AuditReport_SL_nrtrde_$thedate.csv" ]; then
printf 'AuditReport_SL_nrtrde_%s.csv is missing\n' "$thedate" >&2
do_exit=1
fi
if [ ! -f "/dcs/SL_AUDIT_REPORT/AuditReport_SL_ICT_$thedate.csv.gz" ]; then
printf 'AuditReport_SL_ICT_%s.csv is missing\n' "$thedate" >&2
do_exit=1
fi
if [ ! -f "/dcs/SL_AUDIT_REPORT/AuditReport_SL_BI_$thedate.csv.gz" ]; then
printf 'AuditReport_SL_BI_%s.csv is missing\n' "$thedate" >&2
do_exit=1
fi
if [ "$do_exit" -eq 1 ]; then
echo 'Some files are missing, exiting' >&2
exit 1
fi
if ! scp "/nrtrdepath/AuditReport_SL_nrtrde_$thedate.csv" \
"/dcs/SL_AUDIT_REPORT/AuditReport_SL_ICT_$thedate.csv.gz" \
"/dcs/SL_AUDIT_REPORT/AuditReport_SL_BI_$thedate.csv.gz" \
[email protected]:/tmp/SL_Audit_Report/
then
echo 'Errors executing scp' >&2
else
echo 'Transfer is done.'
fi
答案2
如果文件中有变量分配,那么您可以通过获取该文件来激活它们:
source /path/to/config_file