shell脚本中的if-else错误

时间:2013-01-05 22:33:36

标签: bash shell if-statement

这是我的shell脚本以及运行时遇到的错误:

#!/bin/bash

path=$1
execute=$2
a=$3
operation=$4
name=$5

if [ "$operation" == "run" ]; then
    cd $path
   ./$execute $a 
fi
elif [ "$operation" == "copy" ]; then
    mkdir -p $path
    cp $execute $path/$name 
fi
elif [ "$operation" == "delete" ]; then
     rm $path
     cd copy
     rm $name
     cd ..
     rmdir copy
fi
./commandsScript.sh: line 14: syntax error near unexpected token `elif'
./commandsScript.sh: line 14: `elif [ "$operation" == "copy" ]; then'

我花了很长时间尝试所有排序的if-else语句差异,但没有找到错误解决方案。可能有人帮忙吗?

2 个答案:

答案 0 :(得分:4)

删除第一个和第二个fi。它应该看起来像

if ...
...
elif ...
...
elif ...
...
fi

有关详细信息,请参阅Bash - Conditional Constructs

答案 1 :(得分:4)

考虑使用case表达式而不是一组链式if语句:

case "$operation" in
run)
    cd "$path"
    ./"$execute" "$a"
    ;; 
copy)
    mkdir -p "$path"
    cp "$execute" "$path/$name"
    ;;
delete)
    rm "$path"
    cd copy
    rm "$name"
    cd ..
    rmdir copy
    ;;
esac

我还冒昧地引用了你所有的参数扩展,这就是你应该养成使用嵌入空格使你的脚本对参数/变量具有鲁棒性的习惯。

另外,我建议投资正确的错误处理。