2016-06-27 5 views
0

이것은 bash 스크립트입니다.
Counter.sh :
AWK를 사용하여 스크립트에있는 변수 변경

이 스크립트, 카운트 변수의 5 행에
#!/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는 사용) 해당 파일을 사용하여 메인 스크립트에 다음과 cron 작업의

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

같은 또는 유사한을 고려;

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

이 표면적으로는 또 다른 성가신 문제 (변수에 코드를!)이 (큰 승리 인) 즉석에서 스크립트를 변경하기위한 요구 사항을 제거하고, 당신은 아마 더 좋은 방법을 찾을 수 있어야하지만 그것을 해결하십시오.

관련 문제