2015-03-13 4 views
5

Я хотел бы написать скрипт, который проверяет, удалось ли копировать или нет. Вот что у меня есть:Unix Shell Scripting - проверка того, что копия завершена

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
    echo "Copy Code: $? - Successful" 
if [ $? != 0 ]; then 
    echo "Copy Code: $? - Unsuccessful" 
fi 

«тогда» утверждение не инициализируется. Как это можно решить? Спасибо за ваше время.

ответ

18

$? относится к последней команде:

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
    echo "Copy Code: $? - Successful" # last command: cp 
if [ $? != 0 ]; then     # last command: echo 
    echo "Copy Code: $? - Unsuccessful" # last command: [ 
fi 

Если вы хотите повторно работать со статусом конкретной команды, просто сохраните результат в другой переменной:

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
status=$? 
echo "Copy Code: $status - Successful" 
if [ $status != 0 ]; then 
    echo "Copy Code: $status - Unsuccessful" 
fi 

Однако, лучший подход - просто проверить команду cp в первую очередь:

if cp home/testing/present.txt home/testing/future.txt 
then 
    echo "Success" 
else 
    echo "Failure, exit status $?" 
fi 
+0

Удивительно простой и элегантный. Спасибо за ваше решение. –

4

Упростить, упростить, упростить:

#!/bin/sh 
if cp home/testing/present.txt home/testing/future.txt; then 
    echo "Copy Code: $? - Successful" 
else 
    echo "Copy Code: $? - Unsuccessful" 
fi 

Если вы хотите проверить, является ли команда успешно, проверить состояние с if заявления.

Помните, что $? - это статус выхода последней выполненной команды. Это похоже на чрезвычайно изменчивую глобальную переменную (на C или C++). В вашем коде вы запускаете echo, который сжимает значение в $? от команды cp. Если вам нужно явно захватить $?, сделать это явно и сразу после команды, состояние которого необходимо захватить:

cp home/testing/present.txt home/testing/future.txt 
cp_status=$? 

, а затем тест $cp_status в следующем коде.

+0

По словам великого Рика Флэра: «WOOOOOOOOOOOO» –

Смежные вопросы