编写Unix脚本(bash),在命令行指定的位置创建目录


0

我目前有一个Unix脚本(用bash编写),它执行几个命令来修改一组文件,我用包含其路径的flist指定这些文件。该脚本的一般概念是创建一个目录,将flist中的文件放在该目录中,然后执行后续进程,其中一些进程创建更多目录。

我对此的问题是我必须指定我希望目录在脚本本身中的确切文件路径。所以,我的问题是:有没有办法编写脚本,以便我可以输入命令,然后输入目标文件夹的路径,我希望脚本在命令行上执行,并创建初始和所有后续目录通过初始目录中的脚本而不必提供任何路径(即'command / destination / path / for / script /')?

如果这有点啰嗦,请道歉。我对Unix很陌生并且经验很少(因此无法提出更好的措辞)。任何帮助表示赞赏!

Answers:


3

如果我理解正确,您就会问如何将值传递给bash脚本。这很容易,例如:

#!/usr/bin/env bash
directory=$1;
echo "Directory is $directory"

$1 是bash脚本的第一个命令行参数。 $2 是第二个等等。所以,你可以这样运行上面的脚本:

./foo.sh /path/to/bar
Directory is /path/to/bar

如果您希望命令也是变量,您可以执行以下操作:

 #!/usr/bin/env bash
 command=$1;
 directory=$2
 $command $directory

所以,要跑 ls /etc,你会像上面这样运行上面的脚本:

./foo.sh ls /etc

+1用于呈现便携式解决方案(使用env)。
Hennes

这正是我所寻找的。谢谢!!
David

0

我想你在一个地方有文件( /path/to/originals )并希望将它们复制到目标位置( /path/to/destination )然后修改它们。您当前的脚本如下所示:

mkdir /path/to/destination
cp /originals/this-file /path/to/destination
cp /originals/this-other-file /path/to/destination
modify-somehow /path/to/destination/this-file
modify-somehow /path/to/destination/this-other-file

但你不喜欢到处硬编码/路径/到/目的地。 因此,您可以要求使用“第一个位置参数的值”而不是硬编码 /path/to/destination。正如其他人提到的,第一个位置参数的值是 $1

所以你的脚本应该是:

mkdir $1
cp /originals/this-file $1
cp /originals/this-other-file $1
modify-somehow $1/this-file
modify-somehow $1/this-other-file

您应该通过添加目标路径作为参数来调用它:

my-script /path/to/destination

我试图保持脚本简单,但你可以改进它,就像使用单一脚本一样 cp 命令复制多个文件。您也可以使用变量 /originals path(但不是参数,这个听起来像是脚本开头的常量声明)

最后,请考虑如果您的文件名有空格,则需要包围您的文件名 $1 用双引号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.