Linux 检查命令是否在if-in-bash中执行
我是bash编程新手,尝试执行一个程序,该程序将根据提示符提供给它的完整路径创建目录,如果目录已经存在,它将返回错误,因为目录已经存在,并在递归函数中再次请求名称。 这就是我所做的 假设一个文件test1 在里面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
这里的问题是,如果目录存在,那么程序工作正常,但如果不存在,那么它会创建目录,然后转到程序的其他部分。请帮助您可以使用上一个流程的返回代码,即$?。我想你想要像这样的东西
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
- 使用各种列表运算符,您将看到它们很多
- 了解如何通过
和继续
控制循环。使用这样的循环来确保输入了正确的参数并不罕见中断
如果mkdir“$ab”2>/dev/null;然后