2012-05-11 18 views
0

Linux上でランダムなファイルを作成するための簡単なbashスクリプトを作成しました。私はこのようなスクリプトにファイル名やファイルサイズを渡します。Bash Script + Shift複数の変数

./createFiles 5 filename1 filename2 

* 5 =ファイルサイズ

私のコードは次のようになります。

#! /bin/bash 

oriDir=files/ori 
fileSize=$1 
fileName=$2 


# Create files 
for fileName do 

    dd if=/dev/urandom of=$oriDir/$2.mp4 bs=1048576 count=$fileSize 

    # Shift through filenames 
    shift 1 

done 

出力が期待されます。私のディレクトリに2つの新しいファイル:

filename1.mp4 (size 5) 
filename2.mp4 (size 5) 

私が今やるべきことは、様々なファイルサイズforeachファイル名を使用することです。スクリプトは以下の2つのファイル生成されます

./createFiles 5 2 filename1 filename2 

filename1.mp4 (size 5) 
filename2.mp4 (size 2) 

オプションを、スクリプトは次の操作を行うことができる必要があります:場合にはより多くのファイル名があります私のコマンドは以下のようになるでしょう与えられたfilesizes、それだけで、残りのすべてのファイル名の最後のファイルサイズを取る必要があります。

./createFiles 5 2 filename1 filename2 filename3 

が生成されます。

filename1.mp4 (size 5) 
filename2.mp4 (size 2) 
filename3.mp4 (size 2) 

私はshiftを使って遊び、別のshitコマンドを追加しようとしましたが、何も働かなかった。

+0

にあなたがきた道を、このリストを反復処理することができます引数を構造化するために選択された ... ...単純なシェルプログラミングには役立たない。代わりに ...を使用してください。 – Phil

+0

提案していただきありがとうございます! @ティアゴの答えを今すぐ試してください。 – Andrej

+0

元のスクリプトは非常に奇妙です。ループからシフトを外して行うのがより一般的です:fileSize = $ 1;シフト; for fileName; if =/dev/urandom = $ oriDir/$ fileName.mp4 bs = 1048576 count = $ fileSizeの場合はddを実行します。完了 –

答えて

3

あなたはこのような何か

./script file1をfile2のSIZE1 size2に... fileN sizeN

を選択した場合は、ペア

limit=$[ $#/2 ]; 
for((i=0;i<$limit;i++)){ 
file=$1 
size=$2 

# do some stuff 
shift 2 
} 
+0

私の前のコメントはここにnevermind!私はそれを得た;) – Andrej

+0

doを削除します。 Bashで(()){}を使用する場合、もはや必要ありません。 –

+0

最後の1つ:5つのファイルから4つのサイズが同じでなければなりません。 'file1 size1 file2 size2 ...'のようにファイルごとにfilsizeを加えなければならないのか、それとも 'file1にsize1を使うのか? file2からfile5まではsize2'を使う?あまりにも複雑になったら、私はむしろそれをやりません。 – Andrej

関連する問題