Книга: Искусство программирования на языке сценариев командной оболочки

Пример 12-27. Пример сравнения двух файлов с помощью cmp.

Пример 12-27. Пример сравнения двух файлов с помощью cmp.

#!/bin/bash

ARGS=2 # Ожидаются два аргумента командной строки.

E_BADARGS=65

E_UNREADABLE=66

if [ $# -ne "$ARGS" ]

then

echo "Порядок использования: `basename $0` file1 file2"

exit $E_BADARGS

fi

if [[ ! -r "$1" || ! -r "$2" ]]

then

echo "Оба файла должны существовать и должны быть доступны для чтения."

exit $E_UNREADABLE

fi

cmp $1 $2 &> /dev/null # /dev/null -- "похоронит" вывод от команды "cmp".

# cmp -s $1 $2 даст тот же результат ("-s" -- флаг "тишины" для "cmp")

# Спасибо Anders Gustavsson за замечание.

#

# Также применимо к 'diff', т.е., diff $1 $2 &> /dev/null

if [ $? -eq 0 ] # Проверка кода возврата команды "cmp".

then

echo "Файл "$1" идентичен файлу "$2"."

else

echo "Файл "$1" отличается от файла "$2"."

fi

exit 0


Для работы с gzip файлами используется утилита zcmp.

comm

Универсальная утилита сравнения. Работает с отсортированными файлами.

comm -optionsfirst-filesecond-file

comm file-1 file-2 -- вывод в три колонки:

? колонка 1 = уникальные строки для file-1

? колонка 2 = уникальные строки для file-2

? колонка 3 = одинаковые строки.

Ключи, подавляющие вывод в одной или более колонках.

? -1 -- подавление вывода в колонку 1

? -2 -- подавление вывода в колонку 2

? -3 -- подавление вывода в колонку 3

? -12 -- подавление вывода в колонки 1 и 2, и т.д.

Утилиты

basename

Выводит только название файла, без каталога размещения. Конструкция basename $0 -- позволяет сценарию узнать свое имя, то есть имя файла, который был запущен. Это имя может быть использовано для вывода сообщений, напрмиер:

echo "Порядок использования: `basename $0` arg1 arg2 ... argn"

dirname

Отсекает basename от полного имени файла и выводит только путь к файлу.


Утилитам basename и dirname может быть передана любая строка, в качестве аргумента. Этот аргумент необязательно должен быть именем существующего файла (см. Пример A-8).

Оглавление книги


Генерация: 1.881. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз