Linux bash if else命令输出不能继续吗?

时间:2015-06-17 20:32:30

标签: linux bash

#!/usr/bin/env bash
for x in $(cat $1)
do
  wget --recursive -R jpg,bmp,gif,png $x
  cd $x
  for e in $(ls)
  do
    a=`file $e | getfield 2`
    if [ $a == "directory" ]
    then
      for enn in $(ls $a)
      do
        cat $a/$enn | emailaddr
      done
    else
      cat $e | emailaddr
    fi
    done
  cd ..
done

getfield是一个像这样的bash脚本

#!/usr/bin/env 
cut -d' ' -f$1 oo

我认为有必要注意我只是想学习shell脚本以使生活更轻松,而不是用ruby或其他语言编写代码来执行shell命令并在我可以这样做的时候输出输出。

我知道当我执行= file $e | getfield 2时,我的脚本会挂起,但我似乎无法弄明白为什么。有人可以为我澄清一下吗?

1 个答案:

答案 0 :(得分:1)

根本不需要getfieldbash有一个内置测试来检查文件是否是目录。

if [[ -d $e ]]; then

脚本本身更好地写为

while IFS= read -r x; do
  wget --recursive -R jpg,bmp,gif,png "$x"
  cd "$x"
  for e in *; do
    if [[ -d $e ]]; then
      cat "$e"/* | emailaddr
    else
      emailaddr < "$e"
    fi
    done
  cd ..
done < "$1"
相关问题