2016-06-27 80 views
0

這是bash腳本。
Counter.sh:
使用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') 


在這個腳本中,計數變量的5排...我只是想知道如何使用AWK來改變整數1(18字,感謝響應)轉換爲3,然後保存Counter.sh文件。

+2

恕我直言,你的描述你的目標還不清楚。如果包含'counthift.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一些地方再往下,你應該重構,爲避免這種反模式。有關此主題的更多信息,請參閱鏈接的常見問題。

話雖如此,在不改變實時代碼的情況下做這些並不難。考慮在cron工作像

awk 'END { print 5 }' /dev/null > file 

或類似的(用awk只是因爲你的問題問的是,並不是因爲它是最好的工具,這項工作),然後在你的主腳本,使用該文件;

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

雖然這表面上消除了動態更改腳本(這是一個巨大的勝利),你還有另一個討厭的問題(代碼在一個變量!)的要求,你應該找到一個更好的辦法解決這個問題。