Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash循环和退出状态检查_Bash_Loops_Exit Code - Fatal编程技术网

Bash循环和退出状态检查

Bash循环和退出状态检查,bash,loops,exit-code,Bash,Loops,Exit Code,阵列保存被访问的文件,归档文件被分割成更小的大小,以准备在线备份。我试图通过split命令的循环检索每个迭代的退出代码。但是,它正在返回退出代码1,但表示操作成功。为什么? #!/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=(`l

阵列保存被访问的文件,归档文件被分割成更小的大小,以准备在线备份。我试图通过split命令的循环检索每个迭代的退出代码。但是,它正在返回退出代码1,但表示操作成功。为什么?

#!/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

(问题的上一版本中的echo管道是错误的代码,感谢您指出这一点。但是退出代码保持不变。总的来说,除了退出代码部分,脚本做了我希望它做的事情。)

删除
|echo$?
。您正在处理
echo
命令(最后一个命令)的返回代码。

删除
|echo$?
。您正在处理
echo
命令(最后一个命令)的返回代码。

这是一些严重的编码风格不一致。这个脚本有很多错误,可能会导致它崩溃,例如,您正在通过
echo$?
进行管道传输,您没有引用变量,您正在通过
tee进行重定向(而不是管道传输)
。。。也许您可以先尝试清理脚本?这是一些严重的编码风格不一致。这个脚本有很多错误,可能会导致它崩溃,例如,您正在通过
echo$?
进行管道传输,您没有引用变量,您正在通过
tee进行重定向(而不是管道传输)
。。。也许你可以先清理一下脚本?