сценарий оболочки и и и

Я думаю, что это говорит само за себя, поэтому я действительно не знаю, какая часть звучит для вас неоднозначно ... Давайте посмотрим на примере:

- canonicalize

$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp

$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir

$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt

Каким бы ни был варианты: readlink будет: - преобразовать относительный путь в абсолютный путь - преобразовать имя символической ссылки в реальный путь

И, как вы можете видеть выше, с -f , readlink не заботится о том, существует ли последняя часть этого пути (здесь nonexistentfile.txt ) или нет.

Если другая часть этого пути не существует, readlink ничего не выведет и будет иметь код возврата, отличный от 0 (что означает, что произошла ошибка). См .:

$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1

- canonicalize-existing

Если вы попробуете то же самое с -e :

$ readlink -e ./subdir/link
/tmp/realdir

$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1

С -e , в случае, если какой-либо компонент пути не t существует, readlink ничего не выведет и будет иметь код возврата, отличный от 0.

- canonicalize-missing

-m параметр является противоположностью -e . Не будет проводиться проверка, чтобы проверить, существуют ли компоненты пути:

$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile

$ ln -s /nonexistent /tmp/subdir/brokenlink

$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar
0
22.03.2018, 12:37
1 ответ

Для нескольких И используйте

if [ condition ] && [ condition ] && [ condition ]
then
   code
fi

Это работает и с ИЛИ (||), например

if [ "$1" = "normal" ] || [ "$1" = "beta" ] || [ "$1" = "stable" ]
then
    printf 'Site: %s\n' "$1"
else
    echo 'Error, type parameter mode version: normal, beta, stable' >&2
    exit 1
fi

В вашем случае вы также можете использовать:

case "$1" in
    normal|beta|stable)
        printf 'Site: %s\n' "$1" ;;
    *)
        echo 'error' >&2
        exit 1
esac
4
28.01.2020, 02:18

Теги

Похожие вопросы