#!/bin/bash
(...)
if [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ] || [ "$4" == "" ] ; then # WORKS!
echo "Erro #1: Nao inseriu todos os argumentos necessarios! Tente novamente!"
echo "Ajuda #1: Lembre-se, ep1.sh [diretoria] [modo] [informação] <nome_do_ficheiro>"
elif [[ "$2" != "contar" || "$2" != "hist" ]] ; then **# THE PROBLEM!!!**
echo "Erro #2: O segundo argumento está incorrecto! Tente novamente!"
echo "Ajuda #2: Use contar ou hist."
elif [[ "$3" != "palavras" || "$3" != "bytes" ]] ; then # CAN'T TEST BECAUSE OF FIRST ELIF
echo "Erro #3: O terceiro argumento está incorrecto! Tente novamente!"
echo "Ajuda #3: Use palavras ou bytes."
(...)
fi
所以,我的问题出在第一个elif
,当elif
为假时,程序不应该输入elif
,而是进入。
我看不出可能出现什么问题。
任何人都可以帮助我吗?
答案 0 :(得分:1)
使用&&
而非||
。
elif [[ "$2" != "contar" && "$2" != "hist" ]] ; then
切换运营商的原因是De Morgan's law。如果你否定
if [[ $a == "foo" || $b == "bar" || $c == "baz" ]]
你得到了
# negated
if ! [[ $a == "foo" || $b == "bar" || $c == "baz" ]]
De Morgan的法律规定,您可以通过将所有!
切换为==
并将!=
更改为||
来分发&&
。
# `!` distributed per De Morgan's law
if [[ $a != "foo" && $b != "bar" && $c != "baz" ]]