여러 SQL 스크립트를 실행하는 셸 스크립트를 만들려고 합니다.
다음 파일이 있습니다.
$ ls 업그레이드/ 01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql
현재 데이터베이스의 버전이 있습니다.DB_VERSION=02
이제 $DB_VERSION보다 큰 접두사가 있는 파일을 쉽게 반복하고 전역화하여 순차적으로 실행할 수 있는 방법은 무엇입니까?
즉 나는 하고 싶다
f를 위해 ????; MySQL < $f 완벽한
그리고 DB_VERSION=02인 경우 03-foo1.sql
and를 차례로 실행한다.04-buz.sql
답변1
기본 설정:touch 01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql 09-quux.sql 10-lala.sql 99-omg.sql
실제 코드:curr=02; for file in ??-*.sql; do ver="${file:0:2}"; [ "$ver" -gt "$curr" ] && echo "$file"; done
즉, 현재 버전을 로 정의한 02
다음 모든 파일(와일드카드가 포함된 알파벳순)을 살펴보고 숫자 접두사가 숫자상 더 큰 경우 실행합니다. 교체 mysql
(또는 무엇을 가지고 있습니까) echo
.
답변2
zsh에서:
DB_VERSION=02
glob="<$((DB_VERSION+1))->"
for x in $~glob-*; do mysql <$x; done
이것<LOW-UP>
글로벌 운영자정수 범위와 일치합니다. 계산 결과가 아닌 리터럴 정수만 사용할 수 있습니다. 따라서 먼저 매개변수 값으로 glob 패턴을 만든 다음 해당 매개변수를 glob 패턴으로 사용합니다.~
매개변수 확장 옵션.