【问题标题】:Trying to make a if statement that will move on after it's done something in bash试图做出一个 if 语句,它会在 bash 中完成某些操作后继续执行
【发布时间】:2017-08-23 23:57:46
【问题描述】:

我想知道是否有人可以帮助我。

所以,我正在尝试让脚本变得更聪明一点。

我希望它检查文件夹是否存在,如果它确实继续前进,但如果不存在,那么它将为我创建一个文件夹,然后继续执行脚本的下一部分。

问题是我可以用它来制作文件夹,但随后程序就死了,我有点卡住了,有点摸不着头脑。

现在我有一个 If 语句,但它会创建文件夹然后停止。

    TEMPDEST="/home/user/folder"


        if [ ! -d "$TEMPDEST" ]; then
          # Control will enter here if $DIRECTORY doesn't exist.
          echo -e "\e[31mOh, I could not find the folder but it's fine I will create one for you now =D!\e[0m"
          mkdir $TEMPDEST
        fi

#Moving into said dirctory to make sure everything is in one folder.
        cd $TEMPDEST

Other stuff.... 

我在 CentOS 机器上使用 bash。

谢谢, 卡勒姆。

【问题讨论】:

  • $TEMPDEST="/home/user/folder" 应该是 TEMPDEST="/home/user/folder" 没有美元符号 $
  • 那是我的错误,它不像脚本中的那样,我将在这里更改它。
  • 值得注意的是,您可以为此使用mkdir -p(尽管如果您仍想打印该消息,您仍需要您的if)。
  • 脚本的另一个“东西”部分是什么......你如何验证在“如果”之后没有发生任何事情?
  • 默认情况下,bash 只会按顺序执行命令,直到没有任何内容要执行。

标签: bash unix centos


【解决方案1】:

所以在谷歌搜索和玩耍之后,我发现了如何让它像我想要的那样工作。

if [ ! -d "$TEMPDEST" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
  echo -e "\e[31mOh, I could not find the folder but it's fine I will create on for you now =D!\e[0m"
  mkdir $TEMPDEST;
    continue
fi

所以,我只是添加了“然后继续”。

感谢您的帮助!

【讨论】:

  • 无条件运行mkdir -p dirname 更为传统——如果目录已经存在如果它能够创建它,则成功,因此没有理由运行任何先测试一下。
  • 顺便说一句,考虑避免echo -e -- 实现该选项是 bash 打破 POSIX 标准的一个更明显的地方(它不允许 echo 兑现 @987654325 以外的任何选项@)。标准化的首选替代品是printf——它将更可靠地跨多个shell(以及不同配置的bash版本;bash可以配置为具有符合标准的echo,它不会尊重-e)。
  • @CharlesDuffy,虽然我同意,但我正在尝试通过玩耍来扩展我的 bash 知识。我确实明白它正在世界范围内传播,并且是一种复杂的方式。但我打算做一些更复杂的东西,检查会很好。所以在这种情况下它会很好地工作。另请注意,我现在将 echo 更改为 printf。感谢您的帮助。
  • continue 命令会跳过当前循环的周围whilefor 循环的其余部分。如果这就是您所需要的...发生的事情并不是您所描述的全部内容。在我看来,您省略的脚本部分有问题,而这正在以某种方式解决该问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多