【问题标题】:Bash errors and script if condition [duplicate]Bash 错误和脚本条件 [重复]
【发布时间】:2023-01-15 15:07:18
【问题描述】:

按原样删除包含敏感的项目材料。

【问题讨论】:

  • 二进制文件的名称是 [ 而不是 [1。与调用 cd ..ls .cat file 而不是 cd..ls.catfile 的方式相同。 [ 之后和] 之前缺少空格字符。您也缺少所有变量扩展周围的双引号。一旦您的变量值中有空格,这就会产生问题。
  • 此外,使用 ls 获取文件(/目录)名称列表并将这些名称存储在文件中都是不好的做法;只需使用for p in *; do 即可。
  • @GordonDavisson,你有例子吗?
  • 如果文件名中包含有趣的字符,ls 的输出可能会模棱两可且不一致;见"Why you shouldn't parse the output of ls(1)"。这是通常可以正常工作的事情之一,所以你认为这样做是可以的......直到你遇到一个奇怪的情况,它爆炸了。如果你编写了足够多的脚本,你就会厌倦你的脚本因为奇怪的原因而爆炸,并了解哪些方法由于奇怪的原因而爆炸……或者您可以向编写过大量脚本的人学习,并从一开始就正确地构建您的脚本。
  • 请不要破坏您的帖子。通过在 Stack Exchange 网络上发帖,您已授予 SE 分发该内容的不可撤销的权利(在 CC BY-SA 4.0 license 下)。根据 SE 政策,任何破坏行为都将被恢复。如果你真的认为其中的一些是机密的,标记并要求版主删除机密数据而不破坏整个问题。

标签: linux bash redhat


【解决方案1】:

if [$pass -eq 1]; then 必须是 if [ "$pass" -eq 1 ]; then[中的程序名称(位于/usr/bin/[)。与您编写 cat file 而不是 catfile(或 cat$var)的方式相同。

引用所有变量扩展也是值得的。 99% 的情况下使用 "$var" 代替 $var 更好,因为这将保留变量值中的空格。

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2013-09-15
    • 2010-11-05
    • 2013-11-14
    • 2020-08-24
    • 2018-09-05
    • 2013-06-08
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多