【问题标题】:Using command line arguments when executing a BASH script执行 BASH 脚本时使用命令行参数
【发布时间】:2014-06-28 00:33:50
【问题描述】:

我创建了一个脚本,用于从目录中删除所有零长度文件。

#!/bin/bash

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

它工作得很好,除了它只在脚本实际所在的目录及其子目录中工作。我希望能够在执行脚本时将目录用作命令行参数 (bash scriptname dirname),并让它只搜索 that 目录及其子目录,不是脚本所在的实际目录。有没有办法做到这一点?

【问题讨论】:

  • 提示:检查find 接受的参数以及. 的含义

标签: bash command-line-arguments


【解决方案1】:

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

find "$@" -size 0...

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

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

【讨论】:

    【解决方案2】:

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

    ./hello 123 abc xyz 
    

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

    您可以在 $1 到 $9 之间传递值并在程序中使用它们。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 不敢相信我错过了。难道 $* 不是比 $1 更好的选择吗?不会搜索所有作为命令行参数提交的目录吗?
      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2023-01-18
      • 1970-01-01
      • 2017-01-04
      • 2021-11-17
      • 2010-10-06
      相关资源
      最近更新 更多