shell 脚本中的多个条件

shell 脚本中的多个条件

这让我抓狂。关于这个问题有很多帖子,但对我来说都没什么用。我想检查一个文件是否不是 avi 或 mpg,然后我想退出。这是一个简单的例子:

#!/bin/sh

extension="avi"
if [ $extension != "avi" ] || [ $extension != "mpg" ]; then
        echo "ERROR: File is not an avi or mpg"
        exit 1
fi
echo "I should print out"

这总是返回不应该返回的错误消息。我也尝试过:

if [[ $extension != "avi" ]] || [[ $extension != "mpg" ]]; then
if ([[ $extension != "avi" ]] || [[ $extension != "mpg" ]]); then
if [ $extension != "avi" -o $extension != "mpg" ]; then

我错过了什么?

答案1

您的逻辑有误。两个条件都必须满足,而不仅仅是一个条件,因此您需要使用 AND (&&) 运算符,而不是 OR (||)。请尝试:

if [ $extension != "avi" ] && [ $extension != "mpg" ]; then

或更优雅:

if [ $extension != "avi" -a $extension != "mpg" ]; then

答案2

case语句正是为这种情况而设计的。 给出的例子如下:

#!/bin/sh

extension="avi"
case "$extension" in
  avi | mpg )
    echo "I should print out"
    ;;
  * )
    echo "ERROR: File is not an avi or mpg"
    exit 1
    ;;
esac

这具有更容易扩展和阅读的明显优势。

相关内容