执行BASH脚本时使用命令行参数

时间:2014-05-10 08:09:25

标签: bash command-line-arguments

我已经创建了一个脚本,可以从目录中删除所有零长度文件。

#!/bin/bash

find . -size 0 -type f -exec rm -i '{}' \;

它运行良好,但它只适用于脚本实际所在的目录及其子目录。我希望能够在执行脚本时使用目录作为命令行参数( bash scriptname dirname )并让它只搜索那个目录及其子目录,不是脚本所在的实际目录。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

使用$ x,您可以访问bash脚本的第x个命令行参数。所以在你的情况下,这应该像

 find $1 -size 0 -type f -exec rm -i '{}' \;

答案 1 :(得分:0)

在Bash中,您可以将参数传递给脚本。这些参数可以使用$ sign。例如:

./hello 123 abc xyz 

这里$ 0是你的程序名称 $ 1是123等等

您可以传递值并在程序中使用它们从1美元到9美元。

答案 2 :(得分:0)

如果您的find版本接受多条路径,则可以传递所有位置参数:

find "$@" -size 0...

注意:您不应该使用$ *作为文件名!它将参数扩展为字符串,因此任何带有空格或新行的文件名都会破坏命令。 “$ @”保留了这些,所以可以安全地使用它。如果find不接受多个路径,您可以循环遍历以下参数:

for dir in "$@"; do
    find "$dir" -size 0...
done