Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

різні поради

  • Наша взаимовыгодная связь https://banwar.org/

    Для ведення обліку використання сценарію користувачами, додайте наступні рядки в сценарій. Вони запишуть в файл звіту назву сценарію і час запуску.

    # Додавання (>>) облікового запису, про використання сценарію, в файл звіту. date >> $ SAVE_FILE # Дата і час. echo $ 0 >> $ SAVE_FILE # Назва сценарію. echo >> $ SAVE_FILE # Порожній рядок - як роздільник записів. # Не забудьте визначити змінну оточення SAVE_FILE в ~ / .bashrc # (що небудь, типу: ~ / .scripts-run)
  • Оператор >> виробляє додавання рядка в кінець файлу. А як бути, якщо треба додати рядок в початок існуючого файлу?

    file = data.txt title = "*** Це титульний рядок у текстовому файлі ***" echo $ title | cat - $ file> $ file.new # "cat -" об'єднує stdout з вмістом $ file. # В результаті вийде # + новий файл $ file.new, в початок якого додано рядок $ title.

    Само собою зрозуміло, те ж саме можна зробити за допомогою sed .

  • Сценарій командної оболонки може використовуватися як команда всередині іншого сценарію командної оболонки, Tcl, або wish сценарію або, навіть в Makefile . Він може бути викликаний як зовнішня команда з програми на мові C, за допомогою функції system (), тобто system ( "script_name"); .

  • Збирайте свої бібліотеки часто використовуваних функцій і визначень. Ці "бібліотеки" можуть бути до сценаріїв, за допомогою команди крапка (.) Або source .

    # Сценарій-бібліотека # ------ ------- # Зверніть увагу: # Тут немає sha-bang ( "#!"). # І немає "живого коду". # Визначення змінних ROOT_UID = 0 # UID root-а, 0. E_NOTROOT = 101 # Помилка - "звичайний користувач". MAXRETVAL = 255 # Максимальне значення, яке можуть повертати функції. SUCCESS = 0 FAILURE = -1 # Функції Usage () # Повідомлення "Порядок використання:". {If [-z "$ 1"] # Немає аргументів. then msg = filename else msg = $ @ fi echo "Порядок використання:` basename $ 0` "$ msg" "} Check_if_root () # Перевірка прав користувача. {# З прикладу "ex39.sh". if [ "$ UID" -ne "$ ROOT_UID"] then echo "Цей сценарій повинен запускатися з привілеями root." exit $ E_NOTROOT fi} CreateTempfileName () # Створення "унікального" імені для тимчасового файлу. {# З прикладу "ex51.sh". prefix = temp suffix = `eval date +% s` Tempfilename = $ prefix. $ suffix} isalpha2 () # Перевірка, чи перебуває рядок тільки з алфавітних символів. {# З прикладу "isalpha.sh". [$ # -Eq 1] || return $ FAILURE case $ 1 in * [! a-zA-Z] * | "") return $ FAILURE ;; *) Return $ SUCCESS ;; esac # Спасибі SC} abs () # Абсолютне значення. {# Увага: Максимально можливе возвращаеіое значення # не може перевищувати 255. E_ARGERR = -999999 if [-z "$ 1"] # Перевірка наявності вхідного аргументу. then return $ E_ARGERR # Код помилки, зазвичай повертається в таких випадках. fi if [ "$ 1" -ge 0] # Якщо не негативне, then # absval = $ 1 # залишити як є. else # Інакше, let "absval = ((0 - $ 1))" # змінити знак. fi return $ absval} tolower () # Перетворення рядків символів в нижній регістр {if [-z "$ 1"] # Якщо немає вхідного аргументу, then # + видати повідомлення про помилку echo "(null)" return # + і вийти з функції . fi echo "$ @" | tr AZ az # Перетворити все вхідні аргументи ($ @). return # Для запису результату роботи функції в змінну, використовуйте операцію підстановки команди. # Наприклад: # oldvar = "A seT of miXed-caSe LEtTerS" # newvar = `tolower" $ oldvar "` # echo "$ newvar" # a set of mixed-case letters # # Вправа: Додайте в цю бібліотеку функцію перекладу символів в верхній регістр. # Toupper () [це досить просто]. }
  • Для підвищення ясності коментарів, виділяйте їх особливим чином.

    ## Увага! rm -rf * .zzy ## Комбінація ключів "-rf", в команді "rm", надзвичайно небезпечна, ## + особливо при видаленні за шаблоном. # + Продовження коментаря на новому рядку. # Це перший рядок коментаря # + це другий рядок коментаря, # + це останній рядок коментаря. #* Зверніть увагу. #o Приклад. #> Альтернативний варіант. while [ "$ var1"! = "end"] #> while test "$ var1"! = "end"
  • Для створення блокових коментарів, можна використовувати конструкцію if-test .

    #! / Bin / bash COMMENT_BLOCK = # Якщо спробувати ініціювати цю змінну ніж небудь, # + то ви отримаєте несподіваний результат. if [$ COMMENT_BLOCK]; then Блок коментаря - ================================= Це рядок коментаря. Це інший рядок коментаря. Це ще один рядок коментаря. ================================= echo "Цей рядок не виводиться." Цей блок коментаря не викликає повідомлення про помилку! Круто! fi echo "Цей рядок буде виведена на stdout." exit 0

    Порівняйте цей варіант створення блокових коментарів з вбудованим документом, що використовується для створення блокових коментарів .

  • За допомогою службової змінної $? , Можна перевірити - чи є вхідний аргумент цілим числом.

    #! / Bin / bash SUCCESS = 0 E_BADINPUT = 65 test "$ 1" -ne 0 -o "$ 1" -eq 0 2> / dev / null # Перевірка: "дорівнює нулю або не дорівнює нулю". # 2> / dev / null придушення виведення повідомлень про помилки. if [$? -ne "$ SUCCESS"] then echo "Порядок використання:` basename $ 0` целое_чісло "exit $ E_BADINPUT fi let" sum = $ 1 + 25 "# Буде видавати помилку, якщо $ 1 не є цілим числом. echo "Sum = $ sum" # Будь-яка змінна може бути перевірена таким чином, а не тільки вхідні аргументи. exit 0
  • Діапазон, що повертаються функціями значень, 0 - 255 - серйозне обмеження. Іноді може виявитися вельми проблематичним використання глобальних змінних, для передачі результату з функції. У таких випадках можна порекомендувати передачу результатів роботи функції через запис в stdout.

    Приклад 33-10. Незвичайний спосіб передачі значення, що повертається

    #! / Bin / bash # multiplication.sh multiply () # Функції виконує множення всіх переданих аргументів. {Local product = 1 until [-z "$ 1"] # Поки не дійшли до останнього аргументу ... do let "product * = $ 1" shift done echo $ product # значення не буде виведено на екран,} # + оскільки воно буде записано в змінну. mult1 = 15383; mult2 = 25211 val1 = `multiply $ mult1 $ mult2` echo" $ mult1 X $ mult2 = $ val1 "# 387820813 mult1 = 25; mult2 = 5; mult3 = 20 val2 = `multiply $ mult1 $ mult2 $ mult3` echo" $ mult1 X $ mult2 X $ mult3 = $ val2 "# 2500 mult1 = 188; mult2 = 37; mult3 = 25; mult4 = 47 val3 = `multiply $ mult1 $ mult2 $ mult3 $ mult4` echo" $ mult1 X $ mult2 X $ mult3 X mult4 = $ val3 "# 8173300 exit 0

    Такий прийом спрацьовує і для строкових значень. Таким чином, функція може і нечислової результат.

    capitalize_ichar () # Перший символ всіх строкових аргументів {# + переводиться в верхній регістр. string0 = "$ @" # Прийняти всі аргументи. firstchar = $ {string0: 0: 1} # Перший символ. string1 = $ {string0: 1} # Залишок рядки. FirstChar = `echo" $ firstchar "| tr az AZ` # Перетворити в верхній регістр. echo "$ FirstChar $ string1" # Видати на stdout. } Newstring = `capitalize_ichar" each sentence should start with a capital letter. "` Echo "$ newstring" # Each sentence should start with a capital letter.

    Використовуючи цей прийом, функція може навіть кілька значень.

    Приклад 33-11. Незвичайний спосіб отримання декількох значень, що повертаються

    #! / Bin / bash # sum-product.sh # Функція може "повертати" кілька значень. sum_and_product () # Обчислює суму і твір аргументів. {Echo $ (($ 1 + $ 2)) $ (($ 1 * $ 2)) # Висновок на stdout двох значень, розділених пропуском. } Echo echo "Перше число:" read first echo echo "Друге число:" read second echo retval = `sum_and_product $ first $ second` # Отримати результат. sum = `echo" $ retval "| awk '{print $ 1}' '# Перше значення (поле). product = `echo" $ retval "| awk '{print $ 2}' '# Друге значення (поле). echo "$ first + $ second = $ sum" echo "$ first * $ second = $ product" echo exit 0
  • Наступна хитрість - передача масиву в функцію , І масиву з функції.

    Передача масиву в функцію виконується за допомогою запису елементів масиву, розділених пробілами, в змінну, за допомогою операції підстановки команди . Отримати масив назад можна, дотримуючись вищеописаної стратегії, через висновок на stdout, а потім, за допомогою все тієї ж операції підстановки команди і оператора (...) - записати в масив.

    Приклад 33-12. Передача масиву в функцію і повернення масиву з функції

    #! / Bin / bash # array-function.sh: Передача масиву в функцію і ... # "повернення" масиву з функції Pass_Array () {local passed_array # Локальна змінна. passed_array = ( `echo" $ 1 "`) echo "$ {passed_array [@]}" # Список всіх елементів в новому масиві, # + оголошеному і ініціалізувати в функції. } Original_array = (element1 element2 element3 element4 element5) echo echo "original_array = $ {original_array [@]}" # Список всіх елементів вихідного масиву. # Так можна віддати масив у функцію. # ********************************** argument = `echo $ {original_array [@]} '# ** ******************************** # Помістивши все елементи масиву в змінну, # + розділяючи їх пробілами. # # Зверніть увагу: метод прямої передачі масиву в функцію не спрацює. # Так можна отримати масив з функції. # ***************************************** returned_array = ( `Pass_Array" $ argument "`) # ***************************************** # Записати результат у змінну -Маса. echo "returned_array = $ {returned_array [@]}" echo "==================================== ========================= "# А тепер спробуйте отримати доступ до локального масиву # + за межами функції. Pass_Array "$ argument" # Функція виведе масив, але ... # + доступ до локального масиву, за межами функції, виявиться неможливий. echo "результуючий масив (всередині функції) = $ {passed_array [@]}" # "ПУСТЕ" ЗНАЧЕННЯ, оскільки це локальна змінна. echo exit 0

    Більш складний приклад передачі масивів у функції, ви знайдете в Приклад A-11 .

  • Використання конструкцій з подвійними круглими дужками дозволяє застосовувати C-подібний синтаксис операцій присвоєння і инкремента змінних, а також оформлення циклів for і while . Див. приклад 10-12 і приклад 10-17 .

  • Іноді дуже зручно "пропускати" дані через один і той же фільтр, але з різними параметрами, використовуючи конвеєрну обробку. Особливо це відноситься до tr і grep .

    # З прикладу "wstrings.sh". wlist = `strings" $ 1 "| tr AZ az | tr '[: space:]' Z | \ Tr -cs '[: alpha:]' Z | tr -s '\ 173- \ 377' Z | tr Z '' `

    Приклад 33-13. Ігри з анаграмами

    #! / Bin / bash # agram.sh: Ігри з анаграмами. # Пошук анаграм ... LETTERSET = etaoinshrdlu anagram "$ LETTERSET" | # Знайти всі анаграми в наборі символів ... grep '.......' | # Складаються, як мінімум з 7 символів, grep '^ is' | # Починаються з 'is' grep -v 's $' | # Виключаючи множину grep -v 'ed $' # і дієслова в минулому часі # Тут використовується утиліта "anagram" # + яка входить до складу пакету "yawl", розробленого автором. # Http://ibiblio.org/pub/Linux/libs/yawl-0.2.tar.gz exit 0 # Кінець. bash $ sh agram.sh islander isolate isolead isotheral

    Див. також приклад 27-2 , приклад 12-18 і Приклад A-10 .

  • Для створення блокових коментарів можна використовувати. Див. приклад 17-10 .

  • Пристрій може спробувати здійснити утиліти зі сценарію на машині, де ця утиліта відсутня, потенційно небезпечна. Для обходу подібних проблем можна скористатися утилітою whatis .

    CMD = command1 # Основний варіант. PlanB = command2 # Запасний варіант. command_test = $ (whatis "$ CMD" | grep 'nothing appropriate') # Якщо 'command1' не знайдено в системі, то 'whatis' поверне # + "command1: nothing appropriate." # ==> Від перекладача: Будьте уважні! Якщо у вас локалізована версія whatis # ==> то висновок від неї може відрізнятися від використовуваного тут ( 'nothing appropriate') if [[-z "$ command_test"]] # Перевірка наявності утиліти в системі. then $ CMD option1 option2 # Запуск команди з параметрами. else # Інакше, $ PlanB # + запустити command2 (запасний варіант). fi
  • команда run-parts зручна для запуску кількох сценаріїв, особливо в комбінації з cron або at .

  • Було б непогано забезпечити сценарій графічним інтерфейстом X-Window. Для цього можна порекомендувати пакети Xscript, Xmenu і widtools. Правда, перші два, здається більше не підтримуються розробниками. Зате widtools можна отримати тут .

    Пакет widtools (widget tools) вимагає наявності бібліотеки XForms. Крім того, необхідно злегка підправити Makefile , Щоб цей пакет можна було зібрати на типовою Linux-системі. Але найгірше те, що три з шести віджетів не працюють: - (((segfault).

    Для постороения додатків з графічним інтерфейсом, можна спробувати Tk, або wish (надбудова над Tcl), PerlTk (Perl з підтримкою Tk), tksh (ksh з підтримкою Tk), XForms4Perl (Perl з підтримкою XForms), Gtk-Perl (Perl з підтримкою Gtk) або PyQt (Python з підтримкою Qt).

  • А як бути, якщо треба додати рядок в початок існуючого файлу?
    If [$?
    Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: