2012-05-26 108 views
1

數組保存所訪問的文件,並將歸檔文件拆分爲較小的大小,以備在線備份。我試圖通過split命令的循環檢索每次迭代的退出代碼。但是,它返回Exit Code 1,但它表示操作成功。爲什麼?Bash循環和退出狀態檢查

#!/bin/bash 
declare -a SplitDirs 
declare -a CFiles 
CDIR=/mnt/Net_Pics/Working/Compressed/ 
SDIR=/mnt/Net_Pics/Working/Split/ 
Err=/mnt/Net_Pics/Working 
SplitDirs=(`ls -l "$CDIR" --time-style="long-iso" | egrep '^d' | awk '{print $8}'`) 
for dir in "${SplitDirs[@]}" 
do 
    if [ ! -d "$SDIR""$dir" ]; then 
mkdir "$SDIR""$dir" 
    else continue 
    fi 
CFiles=(`ls -l "$CDIR$dir" --time-style="long-iso" | awk '{print $8}'`) 
    for f in "${CFiles[@]}" 
    do 
    if [ ! -e "$SDIR""$dir"/"$f" ]; then 
    split -d -a 4 -b 1992295 "$CDIR""$dir"/"$f" "$SDIR""$dir"/"$f" --verbose 
    if [[ "$?" == 1 ]] 
    then 
     rm -rf "$SDIR""$dir" && echo "$SDIR""$dir" "Removed due to Error code" "$?""." "Testing Archives and Retrying..." 2>&1 | tee "$Err"/Split_Err.log 
     7z t "$CDIR""$dir"/"$f" >> tee stdout.log 2>> "$Err"/"$dir"/7z_Err.log >&2 
     mkdir "$SDIR""$dir" && split -d -a 4 -b 1992295 "$CDIR""$dir"/"$f" "$SDIR""$dir"/"$f" --verbose 
     if [[ "$?" == 1 ]] 
     then 
      rm -rf "$SDIR""$dir" && echo "$SDIR""$dir" "Removed a second time due to Error code "$?". Skipping..." 2>&1 | tee "$Err"/Split_Err.log 
      continue 
     else 
      echo "Split Success:" "$SDIR""$dir"/"$f" "ended with Exit status" "$?" && continue 
     fi 
    else 
     echo "Split Success:" "$SDIR""$dir" "ended with Exit status" "$?" && continue 
    fi 
    else 
    echo "$SDIR""$dir"/"$f" "Exists... Skipping Operation" 2>&1 | tee "$Err"/"$dir"/Split_Err.log 
    continue 
    fi 
    done 

(在這個問題的先前版本中的回聲管道是沒有道理的代碼,並感謝您指出了這一點。退出代碼保持不變,但總的來說,腳本我希望它以除外什麼對於退出代碼部分)。

+2

這是一些嚴重的編碼風格不一致。這個腳本有很多錯誤可能會導致它被打破,比如你通過'echo $?'管道系統,你沒有引用你的變量,你正在重定向(而不是管道)通過'tee'......也許你可以先嚐試清理腳本? – ghoti

回答

1

刪除| echo $?。您正在處理echo命令(最後一個命令)的返回碼。