П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4096 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6756 раз(а).

Учебник HTML.
Просмотров 3717 раз(а).

Руководство по PHP5.
Просмотров 5991 раз(а).

Хостинг через призму DNS.
Просмотров 4809 раз(а).

Подборка текстов стандартных документов.
Просмотров 56244 раз(а).

Учебник PHP - Самоучитель
Просмотров 3702 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8335 раз(а).

Внешние атаки...
Просмотров 4563 раз(а).

Учебник PHP.
Просмотров 3172 раз(а).

SSI в примерах.
Просмотров 175 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Глава 32. Стиль программирования

Возьмите в привычку структурный и систематический подход к программированию на языке командной оболочки. Даже для сценариев "выходного дня" и "писаных на коленке", не поленитесь, найдите время для того, чтобы разложить свои мысли по полочкам и продумать структуру будущего скрипта прежде чем приниматься за кодирование.

Ниже приводится несколько рекомендаций по оформлению сценариев, однако их не следует рассматривать как Официальное Руководство.


32.1. Неофициальные рекомендации по оформлению сценариев

  • Комментируйте свой код. Это сделает ваши сценарии понятнее для других, и более простыми, в обслуживании, для вас.

    PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
    # Эта строка имела некоторый смысл в момент написания,
    # но через год-другой будет очень тяжело вспомнить -- что она делает.
    # (Из сценария "pw.sh", автор: Antek Sawicki)
    


    Добавляйте заголовочные комментарии в начале сценария и перед функциями.

    #!/bin/bash
    
    #************************************************#
    #                   xyz.sh                       #
    #             автор: Bozo Bozeman                #
    #                Июль 05, 2001                   #
    #                                                #
    #          Удаление файлов проекта.              #
    #************************************************#
    
    BADDIR=65                       # Нет такого каталога.
    projectdir=/home/bozo/projects  # Каталог проекта.
    
    # ------------------------------------------------------- #
    # cleanup_pfiles ()                                       #
    # Удаляет все файлы в заданном каталоге.                  #
    # Параметры: $target_directory                            #
    # Возвращаемое значение: 0 -- в случае успеха,            #
    #                        $BADDIR -- в случае ошибки.      #
    # ------------------------------------------------------- #
    cleanup_pfiles ()
    {
      if [ ! -d "$1" ]  # Проверка существования заданного каталога.
      then
        echo "$1 -- не является каталогом."
        return $BADDIR
      fi
    
      rm -f "$1"/*
      return 0   # Успешное завершение функции.
    }
    
    cleanup_pfiles $projectdir
    
    exit 0
    
    Не забывайте начинать ваш сценарий с sha-bang -- #!/bin/bash.

  • Заменяйте повторяющиеся значения константами. Это сделает ваш сценарий более простым для понимания и позволит вносить изменения, не опасаясь за его работоспособность.

    if [ -f /var/log/messages ]
    then
      ...
    fi
    # Представьте себе, что через пару лет
    # вы захотите изменить /var/log/messages на /var/log/syslog.
    # Тогда вам придется отыскать все строки,
    # содержащие /var/log/messages, и заменить их на /var/log/syslog.
    # И проверить несколько раз -- не пропустили ли что-нибудь.
    
    # Использование "констант" дает лучший способ:
    LOGFILE=/var/log/messages  # Если и придется изменить, то только в этой строке.
    if [ -f "$LOGFILE" ]
    then
      ...
    fi
    


  • В качестве имен переменных и функций выбирайте осмысленные названия.

    fl=`ls -al $dirname`                 # Не очень удачное имя переменной.
    file_listing=`ls -al $dirname`       # Уже лучше.
    
    
    MAXVAL=10   # Пишите имена констант в верхнем регистре.
    while [ "$index" -le "$MAXVAL" ]
    ...
    
    
    E_NOTFOUND=75                        # Имена кодов ошибок -- в верхнем регистре,
                                         # к тому же, их желательно дополнять префиксом "E_".
    if [ ! -e "$filename" ]
    then
      echo "Файл $filename не найден."
      exit $E_NOTFOUND
    fi
    
    
    MAIL_DIRECTORY=/var/spool/mail/bozo  # Имена переменных окружения
                                         # так же желательно записывать символами
                                         # в верхнем регистре.
    export MAIL_DIRECTORY
    
    
    GetAnswer ()                         # Смешивание символов верхнего и нижнего решистров
                                         # удобно использовать для имен функций.
    {
      prompt=$1
      echo -n $prompt
      read answer
      return $answer
    }
    
    GetAnswer "Ваше любимое число? "
    favorite_number=$?
    echo $favorite_number
    
    
    _uservariable=23                     # Допустимо, но не рекомендуется.
    # Желательно, чтобы пользовательские переменные не начинались с символа подчеркивания.
    # Так обычно начинаются системные переменные.
    


  • Используйте смысловые имена для кодов завершения.

    E_WRONG_ARGS=65
    ...
    ...
    exit $E_WRONG_ARGS
    
    См. так же Приложение D.

  • Разделяйте большие сложные сценарии на серию более коротких и простых модулей. Пользуйтесь функциями. См. Пример 34-4.

  • Не пользуйтесь сложными конструкциями, если их можно заменить простыми.

    COMMAND
    if [ $? -eq 0 ]
    ...
    # Избыточно и неинтуитивно.
    
    if COMMAND
    ...
    # Более понятно и коротко.
    


Ё

... читая исходные тексты сценариев на Bourne shell (/bin/sh). Я был потрясен тем, насколько непонятно и загадочно могут выглядеть очень простые алгоритмы из-за неправильного оформления кода. Я не раз спрашивал себя: "Неужели кто-то может гордиться таким кодом?"

Ё Landon Noll

Назад | Вперед
Содержание (общее) | Содержание раздела



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