Как сделать это, если заявление в оболочке - PullRequest
0 голосов
/ 17 января 2010

Мне трудно понять, как это сделать, если заявление. Я хочу сделать это:

IF (функция имеет только 1 аргумент И $ 1 является каталогом (в текущем папка)) ИЛИ ЕСЛИ (функция имеет 2 аргументы И $ 1 НЕ является каталогом) THEN

....

END

Извините, если не очень ясно,

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 17 января 2010
if [[ $# == 1 && -d "$1" ]]; then
  echo "one param, first is a dir"
elif [[ $# == 2 && ! -d "$1" ]]; then
  echo "two params, first is not a dir"
else
  echo "unexpected"
fi
0 голосов
/ 17 января 2010

Вы в значительной степени сказали, что нужно в вопросе:

if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ]
then
    ...
fi

Вы также можете использовать другие операторы - которые будут работать в оболочке Bourne, не говоря уже о Korn или других оболочках POSIX (при условии, что $ # работает правильно в функции - что и в Bash).

fun()
{
    if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ]
    then echo "Pass ($1, $#)"
    else echo "Fail ($1, $#)"
    fi
}

fun $HOME
fun $HOME abc
fun $HOME/xyz abc
fun /dev/null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...