2016-06-27 16 views
0

これはbashスクリプトです。
Counter.sh:このスクリプトの5行目に
AWKを使用してスクリプト内の変数を変更する

#!/bin/bash 
rm -rf home/pi/temp.mp3 
cd /home/pi/ 
now=$(date +"%d-%b-%Y") 
count="countshift1.sh" 
mkdir $(date '+%d-%b-%Y') 


、カウント変数が...私はちょうど整数1(18文字、に感謝を変更するためにAWKを使用する方法を知りたいです応答)を3に変換し、Counter.shファイルを保存します。

+2

IMHO、あなたの目標についての説明は不明です。 'countshift.sh'によって処理されるデータのサンプルとその入力からの期待される出力を含んでいれば、完全に** un **になります。これらの定義を入力するようにQを編集することを検討してください。また、 'count = $(countshift1.sh)'がコマンド置換であり、 'countshift1.sh'から返された出力を' count'変数に代入できるようにしたいと思います。がんばろう。 – shellter

+1

これはひどい考えです。スクリプト内のコードは静的でなければなりません。あなたは外部のファイルから値を読み取ることができます。 – tripleee

+1

レコードについては、こちらも参照してください。http://stackoverflow.com/questions/38044884/time-variables-in-bash-scripting – tripleee

答えて

0

私はawkがそのための理想的なツールだとは思わない。それを行うには多くの方法があります。

私はPerlを使用します。

perl -pi -e 's/countshift1/countshift3/' Counter.sh 
+0

GNU Awkでは、 '--inline'と同じことをすることができます – tripleee

+0

私は答えが' sed'を提案していると思いました... – anishsane

1

これは基本的にhttp://mywiki.wooledge.org/BashFAQ/050である - あなたのスクリプトが実際にどこかにさらにダウン$countで何かをすると仮定すると、あなたはおそらく、このアンチパターンを避けるために、それをリファクタリングする必要があります。このトピックに関する詳細はリンクされたFAQを参照してください。

ライブコードを変更せずにここで求めていることをするのは難しくありません。そのファイルを使用して、あなたのメインのスクリプトで、その後(あなたの質問は、それがこの仕事に最適なツールだではないので、それを要求するという理由だけでのAwkを使って)

awk 'END { print 5 }' /dev/null > file 
cronジョブ内

または類似のようなものを考えてみましょうと。

read index <file 
count="countshift$index.sh" 

これは表面的に(大きな勝利である)その場でスクリプトを変更する必要がなくなりますが、あなたはまだ別の厄介な問題(変数のコードを!)持っている、とあなたはおそらくより良い方法を見つける必要がありますそれを解決する。

関連する問題