2013-08-18 2 views
3

스크립트를 실행할 때마다 스크립트의 변수가 증가되도록하고 싶습니다. 이런 식으로 뭔가 :Bash : 스크립트를 실행할 때마다 스크립트에서 변수를 증가 시키십시오.

#!/bin/bash  
n=0 #the variable that I want to be incremented 
next_n=$[$n+1] 
sed -i "2s/.*/n=$next_n/" ${0} 
echo $n 

일을 할,하지만 변수가 설정되어있는 라인 전에 스크립트에 다른 라인을 추가하고 내가 선 sed -i "2s/.*/n=$next_n/" ${0}를 업데이트하는 것을 잊지 경우 너무 좋지 않다됩니다.

또한 변수 값을 유지하기 위해 다른 파일을 사용하지 않는 것이 좋습니다.

다른 아이디어가 있습니까?

답변

6
#!/bin/bash  
n=0;#the variable that I want to be incremented 
next_n=$[$n+1] 
sed -i "/#the variable that I want to be incremented$/s/=.*#/=$next_n;#/" ${0} 
echo $n 
+0

올바른 방법 일 수 있습니다. 그러나 나를 위해 일하지 않습니다. 답변을 검토 할 수 있습니까? –

+0

안녕하세요. \ 다시 $ .try 전에 \를 추가해야합니다. 변수 n으로 선언 한 줄이 변수 #로 끝나야합니다. 샘플 코드처럼 말입니다. – eeeyes

+0

이전보다 좋았습니다. 문제는'sed' 명령이 들어있는 줄도 편집된다는 것입니다. –

5

스크립트는 서브 쉘에서 실행됩니다. 즉, 스크립트가 종료되고 변수를 호출 한 상위 쉘에 전달되지 않으면 해당 변수를 잊어 버린 것입니다. 현재 셸에서 명령 목록을 실행하려면 source 스크립트를 사용하거나 함수를 작성하십시오. 그러한 스크립트에서 일반

((n++)) 

이 작동하지만 동일한 쉘에서 호출 된 경우에만 가능합니다. 스크립트가 다른 쉘에서 작동해야하는 경우 또는 시스템을 껐다가 다시 켠 후에도 값을 파일에 저장하는 것이 가장 간단하고 최선의 방법입니다. (스크립트의 크기를 변경 특히,이 이상한 결과를 초래할 수도 실행될 때 스크립트를 변경

[[ -f saved_value ]] || echo 0 > saved_value 
n=$(< saved_value) 
echo $((n + 1)) > saved_value 

: 그래도, 다른 파일에없는 스크립트 자체를 변수 값을 저장하기 쉬울 수 있습니다 9에서 발생할 수 있습니다 → 10).

관련 문제