2016-05-28 12 views
-2

これは、書きたいと思っているシェルスクリプトの関連部分です。入力変数の末尾に番号付けを変更する方法を知ることはできません。これは、ファイルの名前が異なっていて、スクリプトが引き続き実行できるようにする必要があります。それは-wというファイル命名フラグです。これは私が編集する必要がある唯一のものです。助けてください。ファイルの末尾に別の番号のファイルが添付されている必要があります

ユーザーが入力したファイル名が必要ですが、ファイル名が異なるように番号を付けてください。ここで私がこれまで持っているものです。

echo "Enter filename or enter 'default' to use default file naming " 
    read input_variable5 
    if [ $input_variable5 "default" ] 
    then 
    nohup sudo tcpdump -i $input_variable1 $input_variable2 -G $input_variable3 -W $input_variable4 -w capture_%Y-%m-%d_%H:%M:%S.pcap -z gzip </dev/null >nohup.out 2>&1 & 
    else 
    nohup sudo tcpdump -i $input_variable1 $input_variable2 -G $input_variable3 -W $input_variable4 -w mktemp "$input_variable5".XXXX.pcap -z gzip </dev/null >nohup.out 2>&1 & 
    fi 
+0

あなたは$ {input_variable} 5 $ {input_variable} 4'のようにそれらの最後に数字を追加することができる '$ {input_variable}'のような変数を書くべきです。 –

+0

OPの場合、質問を削除するのではなく、編集することができます(https://stackoverflow.com/posts/37493942/edit)。削除すると、情報、コメント、および回答はすべて失われます。 – jDo

+0

それでは、人々は質問を見ず、とにかく答えが無くなってしまいます。 – Matt

答えて

1

あなたがmktempを使用しようとしている場合テンプレートが(参照:男1 mktempのを)最後のコンポーネントに少なくとも3個の連続」X年代を含まなければならないとして、あなたが最後に拡張子を追加することはできませんが。

、私はあなたの質問を理解していれば、簡単な解決策は、フォーム"$input_variable5.$count.pcap"とファイル名が既に存在するかどうかをチェックし、単純なカウンタ$countを実装することで、そうであれば、未使用の名前が見つかるまで、1によってcountをインクリメント。

declare -i count=0 

echo "Enter filename or enter 'default' to use default file naming " 
read input_variable5 
if [ $input_variable5 "default" ] 
then 
    nohup sudo tcpdump -i $input_variable1 \ 
    $input_variable2 \ 
    -G $input_variable3 \ 
    -W $input_variable4 \ 
    -w capture_%Y-%m-%d_%H:%M:%S.pcap \ 
    -z gzip </dev/null >nohup.out 2>&1 & 
else 
    ## find first available unused filename for -w 
    while [ -f "$input_variable5.$count.pcap" ]; do 
     ((count++)) 
    done 
    nohup sudo tcpdump -i $input_variable1 \ 
    $input_variable2 \ 
    -G $input_variable3 \ 
    -W $input_variable4 \ 
    -w "$input_variable5.$count.pcap" \ 
    -z gzip </dev/null >nohup.out 2>&1 & 
fi 

注:あなたがXXX(3桁形式、例えば000001、など...)保存したい場合は、あなたがprintf -vを使用することができますが、次のようなものであることを行うことができインクリメントを達成する。例えば:

declare -i count=0 
input_variable5=${1:-tmp} 

printf -v fname "%s.%03d.pcap" "$input_variable5" "$count" 

while [ -f "$fname" ]; do 
    ((count++)) 
    printf -v fname "%s.%03d.pcap" "$input_variable5" "$count" 
done 

count0 -padded 3桁の数字として表示される$input_variable5.$count.pcapフォーマットを提供するだろう。

あなたが何をしようとしているのか分からない場合は、私に知らせてください。そうでなければ、質問があれば教えてください。

+0

ありがとう!それは – Matt

+0

私は助けることができてうれしいだった。通常、bashの* skin-the-cat *には複数の方法があります。 –

+0

@Matt:あなたの問題解決に最も役立つ答えを "受け入れる"ことを忘れないでください。 http://meta.stackexchange.com/a/5235/160242を参照してください。あなたは10を持っていますか?評判のポイントは、あなたがアップアップ投票することもできます(それを受け入れることとは別に)。評判のポイントは、ここで人々をS.O. Qに答える。あなたはここで解決策を得てうれしいです。皆さんお元気で。 – shellter

0

あなたはinput_variable5の代わりに読んだとき、私はあなたが次の操作を行うために探していると思う変数input_variableを設定しようとしていることを推測:これはない

echo -n "Enter filename or enter 'default' to use default file naming: " 
read input_variable 
if [ "$input_variable" == "default" ]; then 
    nohup sudo tcpdump -i ${input_variable}1 ${input_variable}2 -G ${input_variable}3 -W ${input_variable}4 -w capture_$(date +'%Y-%m-%d_%H:%M:%S').pcap -z gzip </dev/null >nohup.out 2>&1 & 
else 
    nohup sudo tcpdump -i ${input_variable}1 ${input_variable}2 -G ${input_variable}3 -W ${input_variable}4 -w mktemp "${input_variable}5".XXXX.pcap -z gzip </dev/null >nohup.out 2>&1 & 
fi 

を「デフォルト」と入力すると、else文に-i演算子のファイルdefault1 default2があり、-Gdefault3になりますが、最終的に-wcapture_%Y-%m-%d_%H:%M:%S.pcapになります。

+0

OPが私たちに言ってくれないのは、 '$ input_variable1'、' $ input_variable2'などがコードのどこかに設定されているということです。 '$ input_variable1'は' -i'パラメータ(リッスンするインタフェース)、 '$ input_variable2'は' -G'パラメータ(ログの回転間の秒数)です。私がそれを正しく理解していれば、OPはユーザーが提供していない場合には一意のファイル名の後に置かれます。 – jDo

+0

これはmktempというファイルを作成し、残りのコードを無視することです。 – Matt

+0

はい、まさに入力変数はそのように名前が付けられていますが、変更したい番号はファイル名のものだけですので、ユーザーが入力を求める-wを入力してください。 – Matt

関連する問題