singlepost

Вопрос по bash << На главную или назад  

Сталкнулся с проблемкой, в Униксе надо создать командный файл который будет подсчитывать кол-во каталогов и кол-во файлов и выводыить чего больше:

f='find -type f|wc -l'
k='find -type d|wc -l'
if [ $f > $k ] then echo "File more the dictory" fi
if [ $f < $k ] then echo "Dictory more the File" fi else echo "f=d" fi

Ошибка выходит в 5 строке которой нет(ожидание конца файла)

4 ответов в теме “Вопрос по bash”

  1. 3
    Михаил Шаханов ответил:

    FILES=`find . -type f | wc -l`
    DIRS=`find . -type d | wc -l`
    ((DIRS–)) # не учитываем '.' – текущую директорию

    # в принципе, if нам тут вообще не нужен =)
    [ $FILES -gt $DIRS ] && echo "Files > Directories"
    [ $FILES -lt $DIRS ] && echo "Directories > Files"
    [ $FILES -eq $DIRS ] && echo "Files == Directories"

  2. 2
    Игорь Федоров ответил:

    Во-первых нкавычки не те. Нужно было хоть вывести значения переменных чтоб посмотреть что получилось. Во-вторых в случае срабатывания первого условия всё равно будет выводится что равны потому что else второго условия удовлетворяет. В третьих не забывать точки с запятой ставить в конце списка условий и команд. и одинарные квадратные не очень подходят.

    f=`find -type f|wc -l`
    k=`find -type d|wc -l`
    echo $f
    echo $k
    if [[ $f > $k ]]; then echo "File more then dictories";
    elif [[ $f < $k ]]; then echo "Dictory more then files"; else echo "f=d"; fi

  3. 1
    Жека Кирпичев ответил:

    Внимательно прочитай документацию по тому, как выглядит синтаксис if..then..else в bash.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.