2015-11-22 3 views
0

Мне просто интересно, test Команда Linux.test - команда linux

Есть ли результат от test -f FILE, который я мог бы захватить с помощью переменной?

Как узнать, успешно ли это test или нет?

+0

Итак, какая оболочка? csh, bash, sh, ksh, ... –

+0

@EdHeal Я использую bash – John

+2

'if test -f FILE; затем echo "test returnd true"; else echo "test returnd false"; fi' Смотрите: 'help test' – Cyrus

ответ

2

Команда test устанавливает код выхода. Вы можете проверить значение в $?, но обычно вам это не нужно. Вместо этого вы используете конструкцию потока управления, такую ​​как while или if, которая делает это за кулисами для вас.

while test -e "$myfile"; do 
    if grep -q 'fnord' "$myfile"; then 
     echo "Success! Play again." 
     dd if=/dev/urandom count=1 | base64 >"$myfile" 
    else 
     break 
    fi 
done 

Обратите внимание, как while анализирует код выхода из test и if анализирует код выхода из grep. Каждая из этих программ - и вообще любая полезная утилита Unix - записывается так, что она возвращает нулевой код выхода при успешном выполнении, в противном случае - ненулевое значение.

test, возможно, несколько нечетный в этом все. Исторически сложилось так, что это была небольшая кухонная раковина, чтобы избежать необходимости нагружать синтаксис оболочки большим количеством тестов на строковые и файловые свойства (что может быть ретроспективно, было немного недовольным дизайнерским решением - это сегодня все-таки открывает новички).

Вы также увидите много новичков, которые не забирали эту идиому, и писать код кренделя, как

test -e "$myfile" 
while [ $? -eq 0 ]; do 
    .... 

Yo Dawg, я слышал, вы, как работает test так я бегу test к test выход из сначала test.