如何编写有条件的嵌套bash循环

时间:2019-03-28 22:31:01

标签: bash shell unix

我正在尝试在此处编写一个嵌套的bash循环。在工作目录中的每个目录中,都有文本文件,并且如果我读取第一个文本文件,则希望在每个目录中创建一个名为“核苷酸频率”的新目录。这是我尝试过的方法,但是不起作用。

for d in */ ; do
    echo "My Directories: " ${d}
    for f in $d/*.txt; do
        echo "My File: " ${f}
        if [f = 1]
        then
            mkdir $d/nucleotide_frequency
        fi
    done
done

1 个答案:

答案 0 :(得分:0)

你很近。缺少的是您对文本文件的检查。

此:

if [f = 1]

正在查看函数或程序f是否等于数字1。

bash内置的if函数具有标志-s,用于检查文件是否存在并且大小大于零。

for d in */
do
  echo "My Directories: ${d}"
  for f in "${d}"/*.txt
  do
    echo "My File: ${f}"
    # Let's make sure that the file exists and is not empty
    if [[ -s "${f}" ]]
    then
      mkdir "${d}"/nucleotide_frequency 2>/dev/null
      break
    fi
  done
done

Introduction to if