Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 检查命令是否在if-in-bash中执行_Linux_Bash_Shell_If Statement_Mkdir - Fatal编程技术网

Linux 检查命令是否在if-in-bash中执行

Linux 检查命令是否在if-in-bash中执行,linux,bash,shell,if-statement,mkdir,Linux,Bash,Shell,If Statement,Mkdir,我是bash编程新手,尝试执行一个程序,该程序将根据提示符提供给它的完整路径创建目录,如果目录已经存在,它将返回错误,因为目录已经存在,并在递归函数中再次请求名称。 这就是我所做的 假设一个文件test1 在里面 这里的问题是,如果目录存在,那么程序工作正常,但如果不存在,那么它会创建目录,然后转到程序的其他部分。请帮助您可以使用上一个流程的返回代码,即$?。我想你想要像这样的东西 mkdir $ab 2> /dev/null if [[ $? == 0 ]]; then echo

我是bash编程新手,尝试执行一个程序,该程序将根据提示符提供给它的完整路径创建目录,如果目录已经存在,它将返回错误,因为目录已经存在,并在递归函数中再次请求名称。 这就是我所做的

假设一个文件test1 在里面


这里的问题是,如果目录存在,那么程序工作正常,但如果不存在,那么它会创建目录,然后转到程序的其他部分。请帮助

您可以使用上一个流程的返回代码,即$?。我想你想要像这样的东西

mkdir $ab 2> /dev/null
if [[ $? == 0 ]]; then
    echo "directory created "
    # ...
您可以使用来查看目录是否存在。如果要重复请求目录名,直到得到一个目录名,请使用循环:

while true
do
    read -p"Directory Name: " directory
    if [[ -d $directory ]]     # Directory already exists
    then
        echo "Directory '$directory' already exists. Try again."
        continue
    fi
    mkdir "$directory" && break

    echo "Cannot create directory $directory"
    exit 2             # Or whatever
done
而true
循环是一个无限循环。但是,我在循环中有两个循环控件:返回循环顶部的
continue
语句和结束循环的
break
语句。这就是为什么无限循环(就像所有无限循环一样)不是真正的无限循环

我使用
[[-d“$directory”]
测试目录是否已经存在。如果它已经存在,我将对此进行回应,并使用
continue
返回并重新提示输入目录名

请注意,我的
read
使用了
-p
参数。这是我的提示符,用于执行
read
命令。这是一种将读取和提示结合起来的简单方法

mkdir“$directory”&&break
表示创建目录。
&&
是一个列表运算符。它说要在左边运行命令(mkdir),如果成功(即返回零退出状态),则在右边运行命令(break)并退出我的循环。这相当于:

If mkdir "$directory"
then
    break
fi
if [[ ! -d $directory ]]
then
    mkdir "$directory"
fi
另一个列表运算符是
|
。它表示如果左侧的命令失败(返回非零退出状态),则运行右侧的命令

例如:

[[ -d $directory ]] || mkdir "$directory"
相当于:

If mkdir "$directory"
then
    break
fi
if [[ ! -d $directory ]]
then
    mkdir "$directory"
fi
我在这里详细介绍了许多内容,目的是演示您将在各种shell脚本中看到的许多标准内容

  • 使用
    […]
    进行测试。对于文件、目录、字符串和布尔测试有很多不同的测试。学习它们
  • 使用
    -p
    读取提示
  • 使用各种列表运算符,您将看到它们很多
  • 了解如何通过
    继续
    中断
    控制循环。使用这样的循环来确保输入了正确的参数并不罕见

你究竟为什么要在一个带有回跳和回响输出的子shell中运行东西?只需运行命令。为什么要使用递归?甚至更短:
如果mkdir“$ab”2>/dev/null;然后