我需要创建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
不知道从哪里开始。任何帮助都将非常感激。
答案 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
为空,从而使截断更合适。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