- 我必须制作一个 bash 脚本,该脚本将通过命令行中的参数将文件名从下到上或从上到下更改。所以当我输入命令行时:
./bashScript 下上
那么目录中的所有文件都应该从小写变为大写。
我还必须添加第三个参数,它允许我只更改一个特定文件。例如,我必须能够输入命令行:
./bashScript 下上文件名
答案1
bash
改变变量大小写的运算符是to ${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
如果没有家庭作业,就使用拉里·沃尔的rename
rename 'y/A-Z/a-z/' *
转换为小写。rename 'y/a-z/A-Z/' *
转换为大写。
我不知道这是否适用于所有语言,但这是手册中的示例。