![텍스트 파일에서 T+2를 사용하여 날짜(T)를 업데이트하는 쉘 스크립트](https://linux55.com/image/125357/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20T%2B2%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%82%A0%EC%A7%9C(T)%EB%A5%BC%20%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%ED%95%98%EB%8A%94%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
예를 들어 DD-Mmm-YYYY 형식의 날짜가 텍스트 파일의 4번째 위치에 나타나면 날짜 T를 T+2로 업데이트해야 합니다. 목요일이나 금요일에 날짜가 잘못된 경우 날짜를 T+4로 바꿔야 합니다. 주말은 무시하세요.
스크립트를 시도했지만 if 조건이 작동하지 않습니다.
#!/bin/sh
if [ $# -ne 1 ]
then echo "Usage: read.sh filename";
exit 1;
fi
while read line
do
echo $line
olddate=$(echo $line | cut -d, -f4)
echo "olddate $olddate"
echo $(date -d $olddate +%a)
if [ "date -d $olddate +%a" = Thu ] || [ "date -d $olddate +%a" = Fri ]; then
newdate=$(date +%d-%b-%Y -d "$olddate 4 day")
else
newdate=$(date +%d-%b-%Y -d "$olddate 2 day")
fi
echo "newdate $newdate"
record=$(echo $line | sed "s|${olddate}|${newdate}|")
echo "new record $record"
done < $1
답변1
두 비교에 대해 항상 false로 비교되는 두 개의 문자열을 제공했으므로 이를 명령 대체로 바꿔야 합니다.
if [ "date -d $olddate +%a" = Thu ] || [ "date -d $olddate +%a" = Fri ]; then
newdate=$(date +%d-%b-%Y -d "$olddate 4 day")
else
newdate=$(date +%d-%b-%Y -d "$olddate 2 day")
fi
즉
today="$(date -d $olddate +%a)"
if [ "$today" = Thu ] || [ "$today" = Fri ]; then
newdate=$(date +%d-%b-%Y -d "$olddate 4 day")
else
newdate=$(date +%d-%b-%Y -d "$olddate 2 day")
fi