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

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

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

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

如果这有点冗长,请见谅。我对 Unix 还很陌生,经验很少(因此无法想出更好的措辞)。任何帮助都非常感谢!

答案1

如果我理解正确的话,您问的是怎样将值传递给 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

答案2

假设您在某个位置 ( /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 进行硬编码。因此,您可以要求使用“第一个位置参数的值”,而不是硬编码/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路径(但这不是参数,而是脚本开头的常量声明)

最后,请考虑如果您的文件名有空格,则需要用$1双引号将其括起来。

相关内容