2016-11-06 12 views
0

file001.txtからfile050.txtまでのテキストファイルを生成するBashスクリプトを作成する必要があります。 これらのファイルのうち、「This if file number xxx」(xxxは割り当てられたファイル番号です) file007.txt、私は空にする必要があります。テキストを含む複数のファイルを作成するBashスクリプトを作成するにはどうしたらいいですか?

これは私がこれまで持っているものである

..

#!/bin/bash 

touch {001..050}.txt 

for f in {001..050} 

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

done 

ここから行くためにどこわからない

。どんな助けでも大歓迎です。

+1

ループ内で 'if'ステートメントを使用してみたかったのですか、' echo> file007.txt'のように選択したファイル(file007.txt)を上書きしてループをたどりましたか? –

+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 

ここでは具体的な実装の決定に関するいくつかの単語:

  • を使用して、条件を持っている感覚は(外部コマンドを開始するので)> fileよりもはるかに遅く、切り詰めません(ファイルがすでに存在する場合はその内容が保持されます)。問題のテキストによる説明は、007.txtを空にして切り捨てを適切にすることを示しています。
  • Cスタイルのforループを使用します。 for ((i=0; i<50; i++))は、最大数に変数を使用できることを意味します。すなわち、 for ((i=0; i<max; i++))。対照的に、{001..$max}を行うことはできません。しかし、このが別のステップでゼロパディングを追加する必要があるため、printfとなります。もちろん
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 
0

、あなたはファイル名前とテキストをcostumizeすることができ、重要なことは${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 
関連する問題