Unix bash скрипт для анализа размера каталога - PullRequest
0 голосов
/ 10 декабря 2018

Я пишу простой bash-скрипт для определения размера каталога.Я знаю, что это очень простая задача, просто используя du -sh directory_name.

. Я пытаюсь научиться использовать для циклов, в то время как циклов, если операторы для выполнения этой задачи.Вот мой код:

    #while the directory size is less than 1
    while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -lt "$minimumsize"
    do
        echo "$varDirectory is less than 1kb"
        exit
    done
    #for the directory, display the size in human readable format.
    for $varDirectory  
    do
        du -sh $varDirectory
    done

}

Что он в основном должен делать, это проверять, существует ли пользовательский ввод каталога, если нет, то отображать его нет.Затем используйте цикл while, чтобы проверить, больше ли размер, чем 1, и отобразите, что он больше 1. Наконец, используйте цикл for, чтобы отобразить размер файла.

Я получаю сообщение об ошибке: синтаксическая ошибка рядом с непредвиденным токеном `} '

Обновление

ВЫХОД

    Please enter a directory
    /home/kayenine
    ./directory.sh: line 15: 298M: command not found
    ./directory.sh: line 20: 298M: command not found
    ./directory.sh: line 4: `$varDirectory': not a valid identifier

1 Ответ

0 голосов
/ 10 декабря 2018

Это утверждение неверно:

while [ -d $varDirectory ] && du -s $varDirectory > $minimumsize

> перенаправляет вывод.Это не больше, чем оператор, -gt.Это вызывает ваш бесконечный цикл.

Это тоже неправильно:

    s=echo "$varDirectory is greater then 1kb"

Вы, вероятно, хотите сделать это вместо этого:

    s="$varDirectory is greater then 1kb"

Это также имеет все видыпроблемы:

while [ -d $varDirectory ] && du -s $varDirectory < $minimumsize
    echo $l
    l=echo "$varDirectory is less than 1kb"

Для одного не существует do или done, так что это, вероятно, вызывает вашу синтаксическую ошибку.Также < - это перенаправление, не меньше оператора, -lt.

Надеюсь, вы не запускаете этот скрипт от имени root.

Обновление: Ваше обновление также имеет проблемы.

while [ -d $varDirectory ] && du -sh $varDirectory -gt $minimumsize

Должно быть:

while [ -d "$varDirectory" ] && [ $(du -k $varDirectory | cut -f1) -gt "$minimumsize" ]

Я добавил "" в соответствии с предложением Дэвида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...