如何在shell脚本(bash)中将输入视为相等

时间:2013-10-14 20:47:26

标签: bash shell

我正在处理我的项目,它需要一个将重命名所有文件的shellcript 在目录中。第一个参数是基数 name,second argument是文件扩展名。如果它运行:

./myprog4.sh BASE=Birthday EXT=jpg

然后生成的文件应该具有如下名称: Birthday001.jpgBirthday002.jpgBirthday003.jpg

但我无法将输入视为BASE=$1之类的平等。 通常,当我在执行脚本文件时接受输入时,我写了类似的内容:

base=$1 
extension=$2 

我该怎么办?

3 个答案:

答案 0 :(得分:1)

首先,要知道你可以通过前缀命令在程序的环境中设置值,并带有变量赋值:

BASE=Birthday EXT=jpg ./myprog4.sh

myprog4.sh启动时,会看到BASEEXT的给定值。存在myprog4.sh后,BASEEXT会保留旧值(或根据具体情况保持未设置状态)。


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

  

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

要使用它,您需要使用set命令启用此选项,然后才能致电myprog4.sh

$ set -k
$ ./myprog4.sh BASE=Birthday EXT=jpg

答案 1 :(得分: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)

答案 2 :(得分:0)

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

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

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