Использование команды ls приводит к циклу - PullRequest
0 голосов
/ 18 мая 2018

Я хочу использовать результат команды ls в цикле, чтобы проверить, является ли, например, первая строка каталогом, второй и т. Д. Например, у меня есть эта папка, которая содержит один каталог, который должен отображать скрипт:

18_05_2018 является каталогом

введите описание изображения здесь

1 Ответ

0 голосов
/ 18 мая 2018

Создайте файл с именем is_file_or_directory.sh, содержащий:

cd "$1" || echo "Please specify a path" && exit
for i in *; do
    if [[ -d $i ]]; then
        echo "$i is a directory"
    elif [[ -f $i ]]; then
        echo "$i is a file"
    else
        echo "$i is not valid"
        exit 1
    fi
done

Сделайте этот файл исполняемым с:

sudo chmod +x is_file_or_directory.sh

Запустите скрипт, указав в качестве параметра путь, который вы хотите проанализировать:

./is_file_or_directory.sh /root/scripts/

Вывод:

jeeves ~/scripts/stack # ./is_file_or_dir.sh /root/scripts/
databe.py is a file
is_file_or_dir.sh is a file
mysql_flask.py is a file
test is a directory

Вот более подробное объяснение того, что происходит под капотом.Переменная $ 1 в Bash является первым параметром, отправляемым в сценарий.В нашем случае это путь, по которому скрипт будет выполнять свои действия.Затем мы используем переменную $ i в цикле.

$ i содержимым будет каждое имя файла / папки в пути $ 1.С помощью -d и -f мы проверяем, является ли $ i файлом или папкой.

...