我正在处理我的项目,它需要一个将重命名所有文件的shellcript 在目录中。第一个参数是基数 name,second argument是文件扩展名。如果它运行:
./myprog4.sh BASE=Birthday EXT=jpg
然后生成的文件应该具有如下名称:
Birthday001.jpg
,Birthday002.jpg
,Birthday003.jpg
等
但我无法将输入视为BASE=$1
之类的平等。
通常,当我在执行脚本文件时接受输入时,我写了类似的内容:
base=$1
extension=$2
我该怎么办?
答案 0 :(得分:1)
首先,要知道你可以通过前缀命令在程序的环境中设置值,并带有变量赋值:
BASE=Birthday EXT=jpg ./myprog4.sh
myprog4.sh
启动时,会看到BASE
和EXT
的给定值。存在myprog4.sh
后,BASE
和EXT
会保留旧值(或根据具体情况保持未设置状态)。
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。