如何在 bash 中使用(三个)参数将下限更改为上限?

如何在 bash 中使用(三个)参数将下限更改为上限?
  1. 我必须制作一个 bash 脚本,该脚本将通过命令行中的参数将文件名从下到上或从上到下更改。所以当我输入命令行时:

./bashScript 下上

那么目录中的所有文件都应该从小写变为大写。

  1. 我还必须添加第三个参数,它允许我只更改一个特定文件。例如,我必须能够输入命令行:

    ./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/' *转换为大写。

我不知道这是否适用于所有语言,但这是手册中的示例。

相关内容