![Bash에서 (3개) 매개변수를 사용하여 하한을 상한으로 변경하는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/142599/Bash%EC%97%90%EC%84%9C%20(3%EA%B0%9C)%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%98%ED%95%9C%EC%9D%84%20%EC%83%81%ED%95%9C%EC%9C%BC%EB%A1%9C%20%EB%B3%80%EA%B2%BD%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
- 명령줄의 인수를 통해 파일 이름을 아래에서 위로 또는 위에서 아래로 변경하는 bash 스크립트를 만들어야 합니다. 따라서 명령줄에 입력하면 다음과 같습니다.
./bashScript 상향식
그러면 디렉터리의 모든 파일이 소문자에서 대문자로 변경되어야 합니다.
또한 특정 파일 하나만 변경할 수 있도록 하는 세 번째 매개변수도 추가해야 했습니다. 예를 들어 다음 명령줄을 입력할 수 있어야 합니다.
./bashScript 파일 이름
답변1
bash
변수의 대소문자를 변경하는 연산자는 ${var^^*}
-upper 및 ${var,,*}
to-lower입니다. 따라서 다음과 같습니다.
#! /bin/bash -
die() { printf >&2 '%s\n' "$@"; exit 1; }
usage() { die "Usage:" " $0 "{"lower upp","upper low"}"er [files]"; }
(( $# >= 2 )) || usage
from=$1 to=$2; shift 2
[[ $from = @(upper|lower) ]] &&
[[ $to = @(upper|lower) ]] &&
[[ "$from" != "$to" ]] || usage
shopt -s nullglob dotglob
IFS= ret=0
(( $# > 0 )) || set -- *[[:$from:]]*
for file do
case $to in
(upper) newfile=${file^^*};;
(lower) newfile=${file,,*};;
esac
[[ "$file" = "$newfile" ]] ||
echo mv -i -- "$file" "$newfile" ||
ret=$?
done
exit "$ret"
echo
테스트 완료 후 삭제하세요.
답변2
숙제가 없으면 Larry Wall의 것을 사용하세요rename
rename 'y/A-Z/a-z/' *
소문자로 변환합니다.rename 'y/a-z/A-Z/' *
대문자로 변환합니다.
이것이 모든 언어에서 작동하는지 모르겠지만 이것은 매뉴얼의 예입니다.