2013-07-02 1 views
0

У меня возникла проблема при печати результата, когда файл не существует. Скажем, я использую этот код в БашКак изменить результат, когда файл не существует в bash?

v1=`cat /ieee80211/phy2/rcstats` 
echo $v1 

Когда файл существует, он будет отображать значение, как это

0.8 
0.6 
0.3 

Но когда файл не существует, он просто будет показывать:

cat: /ieee80211/phy2/rcstats: No such file or directory 

Как изменить это предупреждение на 1.0?

То, что я знаю, я просто как этот

if [! -f $v1]; then 
    echo "1.0" 
fi 

, но результат будет просто распечатать 1.0 когда файл существует, и предупреждение по-прежнему появляется

Что я должен делать? Спасибо

ответ

1

Лучшая обработка ошибок в этом случае - проверить, существует ли файл, и если да, сделайте cat, а не наоборот.

Как это:

file="/ieee80211/phy2/rcstats" 
if [ -f $file ] 
then 
    v1=$(< $file) 
fi 
+0

Это не совсем лучшая обработка ошибок: у вас будет ошибка, если файл не читается. Даже если у вас может быть ошибка, если 'cat' терпит неудачу в середине обработки. –

+1

Большое вам спасибо. Он работает с небольшими изменениями, в моем случае, если [-f $ файл] затем v1 = «1,0» еще v1 = 'кошка $ file' фи – user2290560

+0

Это зависит от того, как далеко вы хотите пойти с обработкой ошибок , но вы правы, есть еще кое-что, чтобы проверить, хотите ли вы быть действительно в безопасности. – tamasgal

4

[ является командой. Для этого нужны промежутки между ним и его первым аргументом.

if [ ! ... ]; then 
    ^
    here 
+0

Я отредактировал ваш ответ для будущих читателей. Если вы считаете, что изменение не имеет значения, не стесняйтесь отката изменений. :) – Leri

+1

@PLB: S'okay, люди получают уведомления, когда их (не-wiki) материал редактируется. –

+0

Огромное вам спасибо – user2290560

0

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

{ v1=$(</ieee80211/phy2/rcstats) ; } 2>/dev/null 
echo "$v1" 

Примечание. Избегайте использования backticks, вместо этого используйте $(...).

+0

Обратные обратки в '' v1 = \ 'cat ... \' OP 'теряются из-за неправильного вычисления, которое исправлено сейчас. – Jens

+0

Большое спасибо за ответы – user2290560

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