0

我正在处理我的项目,它需要一个 shellscript 来重命名目录中的所有文件。第一个参数是基本名称,第二个参数是文件扩展名。如果它运行为:

./myprog4.sh BASE=Birthday EXT=jpg

那么生成的文件应该具有如下名称: Birthday001.jpgBirthday002.jpgBirthday003.jpg等。

但我不能将输入视为等式,例如BASE=$1. 通常,当我在执行脚本文件时接受输入时,我会写如下内容:

base=$1 
extension=$2 

我应该怎么办?

4

3 回答 3

1

首先,知道您可以通过在命令前加上变量赋值来设置程序环境中的

BASE=Birthday EXT=jpg ./myprog4.sh

启动时,myprog4.sh它会看到给定的值。存在后,并保留其旧值(或保持未设置,视情况而定)。BASEEXTmyprog4.shBASEEXT


bash确实允许您使用选项来以您尝试的方式调用您的程序-k。从手册页:

-k 赋值语句形式的所有参数都放置在命令的环境中,而不仅仅是命令名称之前的参数。

要使用它,您需要set在调用之前使用命令启用此选项myprog4.sh

$ set -k
$ ./myprog4.sh BASE=Birthday EXT=jpg
于 2013-10-14T21:15:08.270 回答
0

读取变量的方式类似,但只提取必要的部分$1$2

base=$(echo $1 | cut -d'=' -f2)
extension=$(echo $2 | cut -d'=' -f2)

在 bash 中,您还可以执行以下操作:

base=$(cut -d'=' -f2 <<<$1)
extension=$(cut -d'=' -f2 <<<$2)
于 2013-10-14T20:56:20.640 回答
0

如果您的所有参数都以 的形式传递name=value,那么您可以在 myprog4.sh 脚本的开头执行以下操作。

while [ "$1" != "" ]; do
   expr $1
  shift
done

当您调用./myprog4.sh BASE=Birthday EXT=jpg您的脚本时,将能够执行 echo $BASE 和 echo $EXT。

于 2013-10-14T21:06:59.817 回答