Shell-Script

逐行讀取文件,如果滿足條件,繼續讀取直到結束

  • March 9, 2019

我想獲取位於兩個不同位置和scp另一台伺服器的使用者提示日期文件。這是我到目前為止所做的,我正在努力從文件中讀取常量並使用 if 條件進行調節。

  • path1 ( /nrtrdepath/) 有 1 個文件
  • path2 ( /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 cmb@172.23.1.136:/tmp/SL_Audit_Report/
   else
   for i in $k; do scp /dcs/SL_AUDIT_REPORT/$i cmb@172.23.1.136:/tmp/SL_Audit_Report/
fi
done

看起來您想要做的是根據日期字元串選擇三個文件,然後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" \
   cmb@172.23.1.136:/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" \
        cmb@172.23.1.136:/tmp/SL_Audit_Report/
then
   echo 'Errors executing scp' >&2
else
   echo 'Transfer is done.'
fi

引用自:https://unix.stackexchange.com/questions/390393