날짜 변경 스크립트

날짜 변경 스크립트
#!/bin/sh

after=$(date - date "today - $(date +% d) days" +%Y-%m-%d)

now=$(date +%Y%m01) 

sed -i 's/20180301/'$now'/g' hyb.txt; 

sed -i 's/2018-02-28/'$after'/g' hyb.txt;

내 날짜 20180301 및 2018-02-28 형식에 변수를 할당하여 더 이상 스크립트에서처럼 변수를 입력하지 않도록 하려면 어떻게 해야 합니까?

답변1

위의 의견에서 내 가정이 정확하다고 가정합니다.

# "now" == first day of this month: format YYYYmmdd
now=$( date "+%Y%m01" )

# "after" == last day of previous month: format YYYY-mm-dd
after=$( date -d "$now - 1 day" "+%Y-%m-%d" )

echo "now=$now"         # now=20190901
echo "after=$after"     # after=2019-08-31

답변2

이는 도움이 될 것입니다:

#!/bin/sh

file=hyb.txt

nowfile=${1:-20180301}
afterfile="${2:-"$(date -d "$nowfile -1 day" +"%Y-%m-%d")"}"

now=$(date +%Y%m01) 
after=$(date -d "$now -1 days" +%Y-%m-%d)

echo sed -i 's/'"$nowfile"'/'"$now"'/g' "$file"; 
echo sed -i 's/'"$afterfile"'/'"$after"'/g' "$file";

스크립트에는 매개변수가 필요합니다.

매개변수 1은 now변경해야 하는 파일 내의 값입니다. 인수 1이 제공되지 않으면 기본값은 입니다 20180301.

매개변수 2는 after파일( ) afterfile내에서 변경할 값 이다. 지정하지 않으면 now값은 file() 내부 값을 기반으로 계산됩니다 nowfile.

이 스크립트를 ./script 20180301 2018-02-28원본 스크립트로 호출하세요.

./script 20180901스크립트가 새 값을 계산하도록 하기 위해(두 번째 인수 없이) 호출됩니다 afterfile(결과는 20180831).

계산된 값이 요구 사항을 충족하는 경우 echosed 전에 두 값을 제거하여 스크립트가 파일을 처리할 수 있도록 합니다.

관련 정보