Linux 简化bash代码
我在shell脚本中有以下代码。一切正常Linux 简化bash代码,linux,bash,shell,Linux,Bash,Shell,我在shell脚本中有以下代码。一切正常 #!/bin/bash baseDirPath = '/stackoverflow/question' newDir = '/stackoverflow/question/answers' # first check some business condition if [[ some condition here ]] then # check if base Directory path already exit if [
#!/bin/bash
baseDirPath = '/stackoverflow/question'
newDir = '/stackoverflow/question/answers'
# first check some business condition
if [[ some condition here ]]
then
# check if base Directory path already exit
if [ -d $baseDirPath ];then
# check if new Directory exits or not, if not create one
if [ ! -d $newDir ];then
mkdir $newDir
if [ $? -ne 0 ] ; then
echo "error occurred while creating directory "
fi
fi
else
exit 1;
fi
fi
我觉得这是一个非常混乱且不干净的代码。
我对编程非常陌生,所以不确定它是如何干净的
我很好奇,是否可以让它变得更简单,或者有其他方法来做到这一点
(上面没有显示完整的shell脚本,只显示了复杂的if-else部分。)
这稍微改变了语义——如果由于任何原因,newDirs
的创建失败,baseDirPath
不是目录,或者baseDirPath
是目录,并且无法创建newDir
,则会退出
您可能也可以删除该错误消息mkdir
如果由于某种原因失败,则会在stderr上显示错误:
mkdir -p "$newDir" || exit 1
如果大多数命令都是这样工作的(即,要么成功,要么关闭整个脚本),那么最好设置set-e
(~exit,当命令以非零状态返回时),然后执行以下操作:
mkdir -p "$newDir"
这稍微改变了语义——如果由于任何原因,newDirs
的创建失败,baseDirPath
不是目录,或者baseDirPath
是目录,并且无法创建newDir
,则会退出
您可能也可以删除该错误消息mkdir
如果由于某种原因失败,则会在stderr上显示错误:
mkdir -p "$newDir" || exit 1
如果大多数命令都是这样工作的(即,要么成功,要么关闭整个脚本),那么最好设置set-e
(~exit,当命令以非零状态返回时),然后执行以下操作:
mkdir -p "$newDir"
这可以完全简化:
#!/bin/bash
baseDirPath='/stackoverflow/question'
newDir='/stackoverflow/question/answers'
# first check some business condition
if [[ some condition here ]]; then
if ! mkdir -p "${newDir}"; then
echo "Unable to create directory ${newDir}. Aborting."
exit 1
fi
# Proceed as normal
fi
如果确实需要存在baseDirPath
,则可以添加该条件:
if [[ ! -d "${baseDirPath}" ]] || ! mkdir -p "${newDir}"; then
这可以完全简化:
#!/bin/bash
baseDirPath='/stackoverflow/question'
newDir='/stackoverflow/question/answers'
# first check some business condition
if [[ some condition here ]]; then
if ! mkdir -p "${newDir}"; then
echo "Unable to create directory ${newDir}. Aborting."
exit 1
fi
# Proceed as normal
fi
如果确实需要存在baseDirPath
,则可以添加该条件:
if [[ ! -d "${baseDirPath}" ]] || ! mkdir -p "${newDir}"; then
仅供参考,shell脚本不一定是perl脚本。这个特定的shell脚本是bash,如顶部的shebang(the
#!
)所示。Perl是一种独立的编程语言,看起来与bash脚本类似,但功能更强大、功能更全面。正如@mwp所指出的,这不是Perl。我修改了标题以反映这一点,并做了一些其他编辑以修复代码格式和语法。如果您不喜欢我所做的,请随意选择或回滚(以及编辑页面上的选项)。您的意思是没有空格的baseDirPath='/stackoverflow/question'
?如果等号周围有空格,那么赋值就不起作用。另外,在这里提问之前,请先把它通读一遍……不过,一般来说,有关代码的堆栈溢出问题需要特定的问题或错误,以及产生该问题的最小复制器。这不符合条件。仅供参考,shell脚本不一定是perl脚本。这个特定的shell脚本是bash,如顶部的shebang(the#!
)所示。Perl是一种独立的编程语言,看起来与bash脚本类似,但功能更强大、功能更全面。正如@mwp所指出的,这不是Perl。我修改了标题以反映这一点,并做了一些其他编辑以修复代码格式和语法。如果您不喜欢我所做的,请随意选择或回滚(以及编辑页面上的选项)。您的意思是没有空格的baseDirPath='/stackoverflow/question'
?如果等号周围有空格,那么赋值就不起作用。另外,在这里提问之前,请先把它通读一遍……不过,一般来说,有关代码的堆栈溢出问题需要特定的问题或错误,以及产生该问题的最小复制器。这不符合条件。为什么要用花括号?这些扩展都没有被参数化,而且在任何情况下都不会消除变量名的歧义;这也意味着我在将变量嵌入其他文本时不必做任何事情(例如,${varname}\u ext
,它在语义上不同于$varname\u ext
)。由于始终使用卷曲比异常更符合规则,因此它使语法更加一致。这也是为什么我总是使用[[]]
对,即使[]
在技术上可以工作。为什么要用花括号?这些扩展都没有被参数化,而且在任何情况下都不会消除变量名的歧义;这也意味着我在将变量嵌入其他文本时不必做任何事情(例如,${varname}\u ext
,它在语义上不同于$varname\u ext
)。由于始终使用卷曲比异常更符合规则,因此它使语法更加一致。这也是我总是使用[[]]
对的原因,即使[]
在技术上可以工作。