#!/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
).
계산된 값이 요구 사항을 충족하는 경우 echo
sed 전에 두 값을 제거하여 스크립트가 파일을 처리할 수 있도록 합니다.