如何创建一个Bash脚本,用于创建包含文本的多个文件?

时间:2016-11-06 19:24:19

标签: bash

我需要创建Bash脚本,通过file050.txt生成名为file001.txt的文本文件 在这些文件中,所有文件都应该插入“This if file number xxx”(其中xxx是指定的文件编号),file007.txt除外,这需要我清空。

这是我到目前为止所拥有的......

#!/bin/bash

touch {001..050}.txt

for f in {001..050}

do
    echo This is file number > "$f.txt"

done

不知道从哪里开始。任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:0)

continue语句可以用来跳过循环的迭代并继续下一个循环 - 虽然你实际上想要对文件7进行操作(创建它有一个条件:

for (( i=1; i<50; i++ )); do
  printf -v filename '%03d.txt' "$i"
  if (( i == 7 )); then
    # create file if it doesn't exist, truncate if it does
    >"$filename"
  else
    echo "This is file number $i" >"$filename"
  fi
done

关于具体实施决策的几句话:

  • 使用touch file> file慢得多(因为它启动了一个外部命令),并且没有被截断(所以如果文件已经存在,它将保留其内容);您对问题的文字说明表明您希望007.txt为空,从而使截断更合适。
  • 使用C风格的for循环,即。 for ((i=0; i<50; i++)),表示您可以使用变量作为最大数量;即。 for ((i=0; i<max; i++))。相比之下,你不能{001..$max}。但是, 需要在单独的步骤中添加零填充 - 因此printf

答案 1 :(得分:0)

#!/bin/bash

for f in {001..050}
do
    if [[ ${f} == "007" ]]
    then
        # creates empty file
        touch "${f}.txt"
    else
        # creates + inserts text into file
        echo "some text/file" > "${f}.txt"
    fi

done

答案 2 :(得分:0)

当然,您可以对文件进行成本计算。名称和文字,关键是${i}。我试图说清楚,但如果你不理解某事,请告诉我们。

#!/bin/bash
# Looping through 001 to 050
for i in {001..050}
do
    if [ ${i} == 007 ]
    then
        # Create an empty file if the "i" is 007
        echo > "file${i}.txt"
    else
        # Else create a file ("file012.txt" for example)
        # with the text "This is file number 012" 
        echo "This is file number ${i}" > "file${i}.txt"
    fi
done