【问题标题】:Bash script - File directory does not existBash 脚本 - 文件目录不存在
【发布时间】:2017-08-13 09:21:13
【问题描述】:

我正在创建一个非常简单的 bash 脚本,它将检查目录是否存在,如果不存在,则创建一个。

但是,无论我放在什么目录下都找不到!

请告诉我我做错了什么。

这是我的脚本。

#!/bin/bash
$1="/media/student/System"

if [ ! -d $1 ]
then

    mkdir $1
fi

这是命令行错误:

./test1.sh: line 2: =/media/student/System: No such file or directory

【问题讨论】:

  • 您的脚本在if 测试之前停止。您的分配有误。
  • 你为什么使用$1?这是一个特殊的变量:stackoverflow.com/questions/29258603/…
  • 做你想做的事情的正确方法是:my_var="/media/student/System"; if[ ! -d $my_var] ....
  • 使用 mkdir 命令的参数 p 可以更轻松

标签: bash


【解决方案1】:

试试这个

#!/bin/bash

directory="/media/student/System"

if [ ! -d "${directory}" ]
then
    mkdir "${directory}"
fi

使用 mkdir (manpage of mkdir) 的 parent 参数甚至更短

#!/bin/bash

directory="/media/student/System"
mkdir -p "${directory}"

【讨论】:

  • 虽然在这个例子中这个特殊的硬编码字符串不是问题,但总是引用你的变量可能更好
【解决方案2】:

在 bash 中,除下划线 _ 外,不允许使用数字或符号开头的变量。在您使用的代码中 $1 ,您在那里所做的是试图将 "/media/student/System" 分配给 $1,我想您可能误解了 bash 中的参数是如何工作的。我想这就是你想要的

#!/bin/bash
directory="$1" # you have to quote to avoid white space splitting

if [[ ! -d "${directory}" ]];then
     mkdir "$directory"
fi

像这样运行脚本

$ chmod +x create_dir.sh
$ ./create_dir.sh "/media/student/System"

这段代码的作用是检查“/media/student/System”是否为目录,如果不是目录则创建目录

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2018-03-10
    • 2019-04-26
    • 2015-08-02
    • 2019-01-04
    相关资源
    最近更新 更多