Преобразование оператора if elif fi в оператор case esac в Bash с использованием операторов test

Преобразование оператора if elif fi в оператор case esac в Bash с использованием операторов test
Преобразование оператора if elif fi в оператор case esac в Bash с использованием операторов test - 24ameer @ Unsplash

Преобразуем оператор 'if elif fi' в оператор 'case esac' в Bash с использованием операторов test. Подсчет пропущенных, существующих, файлов нулевого размера, каталогов, символических ссылок, символьных устройств, блочных устройств, каналов, сокетов и непустых обычных файлов.

В программировании на языке Bash операторы ветвления if-elif-fi обеспечивают условное выполнение команд в зависимости от истинности условий. Однако для сложных условий ветвления может быть удобнее использовать оператор case-esac. В этой статье мы рассмотрим преобразование оператора if-elif-fi в оператор case-esac при помощи операторов test, а также подсчет различных типов файлов.

Пример оператора if-elif-fi

if [[ -d $file ]]; then echo "$file является каталогом" elif [[ -f $file ]]; then echo "$file является обычным файлом" fi

В этом примере используется оператор if-elif-fi для проверки, является ли переменная $file каталогом или обычным файлом. Если условие в if выполняется, то выводится сообщение о том, что переменная является каталогом. Если условие в elif выполняется, выводится сообщение о том, что переменная является обычным файлом. Если ни одно из условий не выполняется, блок кода внутри оператора if-elif-fi пропускается.

Пример оператора case-esac

case $file in -d*) echo "$file является каталогом" ;; -f*) echo "$file является обычным файлом" ;; esac

В этом примере использован оператор case-esac для проверки переменной $file на различные условия. Каждое условие представлено ветвью case с соответствующим шаблоном и кодом, который выполняется при совпадении условия. Если ни одно из условий не совпадает, блок case-секции пропускается.

Подсчет различных типов файлов с использованием оператора case-esac и операторов test

Применяя операторы test, можно подсчитать количество различных типов файлов в директории. Рассмотрим пример:

#!/bin/bash directory = "/путь/к/директории" count_directories=0 count_regular_files=0 count_zero_sized_files=0 count_symlinks=0 count_character_devices=0 count_block_devices=0 count_pipes=0 count_sockets=0 for file in $directory/*; do case $file in -d*) count_directories=$((count_directories + 1)) ;; -f*) if [[ -s $file ]]; then count_regular_files=$((count_regular_files + 1)) else count_zero_sized_files=$((count_zero_sized_files + 1)) fi ;; -L*) count_symlinks=$((count_symlinks + 1)) ;; -c*) count_character_devices=$((count_character_devices + 1)) ;; -b*) count_block_devices=$((count_block_devices + 1)) ;; -p*) count_pipes=$((count_pipes + 1)) ;; -S*) count_sockets=$((count_sockets + 1)) ;; esac done echo "Количество каталогов: $count_directories" echo "Количество обычных файлов: $count_regular_files" echo "Количество нулевых файлов: $count_zero_sized_files" echo "Количество символических ссылок: $count_symlinks" echo "Количество символьных устройств: $count_character_devices" echo "Количество блочных устройств: $count_block_devices" echo "Количество каналов: $count_pipes" echo "Количество сокетов: $count_sockets"

В этом примере переменная $directory содержит путь к директории, в которой требуется подсчитать файлы. Затем с использованием цикла for происходит итерация по каждому файлу в директории. Внутри case-секции используются операторы test для проверки различных типов файлов. Соответствующие счетчики увеличиваются в зависимости от типа файла. По завершении цикла выводится количество файлов каждого типа.

Теперь вы знаете, как преобразовать оператор if-elif-fi в оператор case-esac с использованием операторов test и подсчитать различные типы файлов в директории. Это может быть полезно при автоматизации задач, связанных с обработкой файловой системы в скриптах на языке Bash.


NevaDev, 19 августа 2023 г., 10:30