From c0a2c9d586a252aa6bb590b65fffb7eabf92cf8a Mon Sep 17 00:00:00 2001 From: Yevgen Kovalyov Date: Mon, 22 Oct 2018 09:15:55 +0300 Subject: [PATCH 1/6] 03-bash: Add homework Signed-off-by: Yevgen Kovalyov --- 03-bash/README.md | 152 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 03-bash/README.md diff --git a/03-bash/README.md b/03-bash/README.md new file mode 100644 index 0000000..fee582a --- /dev/null +++ b/03-bash/README.md @@ -0,0 +1,152 @@ +# Bash + +## Manuals +- [Advanced bash-scripting guide](http://www.tldp.org/LDP/abs/html/index.html) +- [Bash Reference Manual](https://www.gnu.org/software/bash/manual/) +- [ksh Reference Manual](http://www.bolthole.com/solaris/ksh.html) + + +## Завдання 1 + +### ЗБИРАЄМО ДАНІ ПРО ПЛАТФОРМУ + +##### Створіть bash скрипт `task1.sh`, що збирає базову інформацію про обладнання, операційну систему та конфігурацію мережевих інтерфейсів. + +1. Скрипт повинен мати назву `task1.sh` + і має бути завантажений у GitHub репозиторій GlobalLogic; + +2. Скрипт повинен запускатися командою: + ```bash + ./task1.sh [-h|--help] [-n num] [file] + ``` + де `num` - кількість файлів із результатами, + `file` - шлях та ім'я файла, у який треба записати результат; + наприклад: `task1.sh -n 9 ./test/info/info.txt` + +3. Скрипт повинен обробляти вказані йому при запуску ключі та параметри; + +4. Параметр для ключа `-n` повинен бути цілим числом більшим за 1; + +5. Якщо при запуску вказано ключ `-h` або `--help`, + скрипт повинен вивести лише довідкову інформацію + та завершити свою роботу з успішним результатом; + +6. Якщо хоча б один ключ або параметр вказано неправильно, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +7. Якщо у користувач встановив українську мову локалізації, + скрипт повинен виводити інформацію про помилки українською мовою. + +8. Зібрані дані скрипт повинен записувати у файл, який вказано при запуску, + або у файл `~/bash/task1.out`, якщо при запуску файл не вказано; + +9. Якщо потрібні директорії ще не існують, + скрипт повинен її автоматично створити; + +10. Якщо директорії створити не вдалося, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +11. Якщо файл із вказаним іменем (або іменем `task1.out`) вже існує, + цей файл необхідно перейменувати у файл: `файл-yyyymmdd-nnnn`, де + `файл` - вказане при запуску ім'я файла (або `task1.out`), + `yyyymmdd` - рік, місяць, день перейменування файла, + `nnnn` - номер перейменованого протягом дня файла, починаючи з `0000`; + +12. Якщо при запуску вказано ключ `-n`, + скрипт повинен залишити у піддиректорії лише вказану кількість нових перейменованих файлів із вказаним іменем, + а усі старі файли - видалити; + +13. Приклад файла з даними про платформу: +``` +Date: Sat, 07 Jul 2018 16:18:06 +0300 +---- Hardware ---- +CPU: "Intel(R) Celeron(R) CPU E1400 @ 2.00GHz" +RAM: 2048 MB +Motherboard: "ASUSTeK Computer INC", "P5KPL-AM/PS" +System Serial Number: MT7089K12013428 +---- System ---- +OS Distribution: "CentOS release 6.10 (Final)" +Kernel version: 2.6.32-754.el6.x86_64 +Installation date: Wed Sep 9 14:35:22 2015 +Hostname: ws267.se.nure.ua +Uptime: 1:49 +Processes running: 194 +User logged in: 3 +---- Network ---- +lo: 127.0.0.1/8 +eth0: 192.168.123.231/24 +----"EOF"---- +``` + +14. Значення та розділи (Hardware, System, Network) у файлі + повинні йти лише у вказаному порядку + і у вказаному (включно з лапками) вигляді; + +15. Значення `Motherboard` та `System Serial Number` + потрібно формувати із отриманих з допомогою утиліти `dmidecode` параметрів: + - baseboard-manufacturer, + - baseboard-product-name, + - system-serial-number; + +16. Якщо якесь значення отримати не вдалося, + замість нього потрібно вказувати `Unknown`; + +17. Інформацію про параметри налаштування мережевих інтерфейсів + потрібно збирати незалежно від їх стану та кількості; + +18. Для кожного інтерфейсу повинна виводитися інформація про його IP адресу та мережеву маску; + +19. Якщо IP адресу та маску для інтерфейсу не встановлено, + замість них має виводитися `-/-` + + +## Завдання 2 + +### ВСТАНОВЛЮЄМО ПРОГРАМУ + +##### Створіть bash скрипт `task2.sh`, що встановлює створену в завданні 1 програму в систему. + +1. Скрипт повинен мати назву `task2.sh` + і має бути завантажений у GitHub репозиторій GlobalLogic; + +2. Скрипт повинен запускати користувач root командою: `./task2.sh` + +3. Якщо при запуску вказано ключ `-h` або `--help`, + скрипт повинен вивести лише довідкову інформацію + та завершити свою роботу з успішним результатом; + +4. Якщо ключі або параметри вказано неправильно, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +5. Якщо у користувач встановив українську мову локалізації, + скрипт повинен виводити інформацію про помилки українською мовою; + +6. Скрипт повинен встановити створену в завданні 1 програму в директорію `/usr/local/bin`; + +7. Якщо директорія ще не існує, скрипт повинен її автоматично створити; + +8. Якщо директорію створити не вдалося, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +9. Скрипт повинен автоматично внести зміни у конфігураційні файли системи + таким чином, щоб після інсталяції програми, + будь-який користувач міг її запустити командою: `task1.sh` + +10. Перед внесенням змін, скрипт повинен створити резервні копії конфігураційних файлів + з іменами у вигляді: `файл-yyyymmdd-nnnn`, де + `файл` - ім'я конфігураційного файла, + `yyyymmdd` - рік, місяць, день створення резервної копії, + `nnnn` - номер створеної протягом дня резервної копії, починаючи з `0000`; + +11. Резервні копії конфігураційних файлів мають знаходитися у тій самій директорії, + що і самі файли; + +12. Після встановлення програми, ніхто з користувачів системи (крім root) + не повинен мати можливості вносити в неї зміни; + +13. Якщо програму встановлено успішно, + скрипт повинен завершити роботу з успішним результатом. From f07017a64b8957fac80330887e1d40c91f70a3fa Mon Sep 17 00:00:00 2001 From: Yevgen Kovalyov Date: Mon, 22 Oct 2018 09:20:57 +0300 Subject: [PATCH 2/6] 03-make: Add examples and homework Signed-off-by: Yevgen Kovalyov --- 03-make/README.md | 43 ++++++++++++++++++++++++++++++++++ 03-make/make_email/Makefile | 36 ++++++++++++++++++++++++++++ 03-make/make_simplest/Makefile | 9 +++++++ 03-make/make_simplest/main.c | 6 +++++ 4 files changed, 94 insertions(+) create mode 100644 03-make/README.md create mode 100644 03-make/make_email/Makefile create mode 100644 03-make/make_simplest/Makefile create mode 100644 03-make/make_simplest/main.c diff --git a/03-make/README.md b/03-make/README.md new file mode 100644 index 0000000..900f4f0 --- /dev/null +++ b/03-make/README.md @@ -0,0 +1,43 @@ +# Make + +- [Make manual](https://www.gnu.org/software/make/manual/html_node/index.html) + +## Examples +Examples are from Lectures notes: +* [make_email](make_email) - in this example we are making signed letter from parts; +* [make_simplest](make_simplest) - example of creating simple C program using gcc. + +## Homework + +0. Fix logical error in project `make_simplest` + +1. Create makefile which contains steps for cooking soup. +The rules of makefile should contains action for moving files +of changing their content in different folders like +``` +/kitchen + /table + /pot + /spoon + /knife +/dinning-room +/food-market +``` +The resources should be in files. (e.g. `potato.txt`, `carrot.txt`, `water.txt`) + +2. The cooking process should change file location or generate new files. + +3. Some or all action can be implemented using `*.sh` files like +``` +get_water_from_faucet.sh: + echo "water,cold,$1ml" >> $2 +``` +In rules we can use scipt: +``` +add_water: kitchen/table/pot + get_water_from_faucet.sh 2000 ./kitchen/table/pot +``` + +4. Target clean should remove all generated resources. + +5. Running makefile with option `-k` should generated script which can be used without make. diff --git a/03-make/make_email/Makefile b/03-make/make_email/Makefile new file mode 100644 index 0000000..0f46d89 --- /dev/null +++ b/03-make/make_email/Makefile @@ -0,0 +1,36 @@ +#!/usr/bin/make -f + +# Author: Yevgen Kovalyov ekovalyov@gmail.com +# This Makefile generates e-mail letter from scratch + +#VARIABLES + +NAME = mr. Boss +SIGNER = mr. Signer +DATE := `LC_ALL=en_EN.utf8 date` +#$(eval export DATE=$$(sh -c "LC_ALL=en_EN.utf8 date")) + +# RULES: +# 1st rule is executed by default +letter_signed.txt: letter.txt + cp $< $@ + echo "Signed by ${SIGNER} ${DATE}" >> $@ + +header_template.txt: + echo "Dear %%NAME%%," >> $@ + +header.txt: header_template.txt + sed "-es/%%NAME%%/${NAME}/" <$< >$@ + +body.txt: + echo "Here is the letter provided for the testing purposes" > $@ + +footer.txt: + echo " best regards," > $@ + echo " mr. Sender" >> $@ + +letter.txt: header.txt body.txt footer.txt + cat $^ >$@ + +clean: + rm *.txt diff --git a/03-make/make_simplest/Makefile b/03-make/make_simplest/Makefile new file mode 100644 index 0000000..041a514 --- /dev/null +++ b/03-make/make_simplest/Makefile @@ -0,0 +1,9 @@ + +hello: main.o + gcc -o hello main.o -lc + +main.o: main.c + gcc -c main.c -o main.o + +clean: + -rm *.o main a.out diff --git a/03-make/make_simplest/main.c b/03-make/make_simplest/main.c new file mode 100644 index 0000000..43ad789 --- /dev/null +++ b/03-make/make_simplest/main.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char* argv[]) { + printf("Hello kernel\n"); + return 0; +} From f715ad097ee46210a27ca845026cb237c01fe839 Mon Sep 17 00:00:00 2001 From: "Oleg.Khokhlov" Date: Wed, 24 Oct 2018 11:05:36 +0300 Subject: [PATCH 3/6] Lesson03: First release of test1.sh (system information) Signed-off-by: Oleg.Khokhlov --- 03-bash/task1.out | 15 +++++ 03-bash/task1.sh | 150 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 03-bash/task1.out diff --git a/03-bash/task1.out b/03-bash/task1.out new file mode 100644 index 0000000..65bf4d2 --- /dev/null +++ b/03-bash/task1.out @@ -0,0 +1,15 @@ +Date: Ср, 24 окт 2018 10:54:18 +0300 +---- Hardware ---- +CPU: "Intel(R) Pentium(R) Silver N5000 CPU @ 1.10GHz" +RAM: 4096 MB +Motherboard: "LENOVO", "LNVNB161216" +System serial number: PF199ZW8 +---- System ---- +OS Distribution: "Ubuntu 18.04.1 LTS" +Kernel Version: 4.19.0-rc8+ +Hostname: olegh-ideapad +---- Network ---- +enp1s0: -/- +lo: 127.0.0.1/8 +wlp2s0: 192.168.1.24/24 +---- "EOF" ---- diff --git a/03-bash/task1.sh b/03-bash/task1.sh index a9bf588..032be2e 100755 --- a/03-bash/task1.sh +++ b/03-bash/task1.sh @@ -1 +1,151 @@ #!/bin/bash +# check lang +LNG='en' +SYS_LANG=${LANG::5} +if [ "$SYS_LANG" = "uk_UA" ] +then + LNG='ua' +fi + +# output file name +FNAME=~/bash/task1.out + +declare -i NFILES=0 + +# check and parse command line arguments +for arg +do + if [ $arg = '-h' ] || [ $arg = '--help' ] + then + if [ $LNG = 'ua' ] + then + echo 'Завдання03: учбовий скрип shell: інформація про систему' + echo 'arguments:' + echo ' -h or --help - this help' + echo ' -n N - max number of output files' + echo ' filename - path and name of file to store system information' + else + echo 'Lesson03: educative shell script: system info' + echo 'arguments:' + echo ' -h or --help - this help' + echo ' -n N - max number of output files' + echo ' filename - path and name of file to store system information' + fi + exit 0 + elif [ $NKEY ] + then + NKEY='' + if [ $arg -ge "1" ] + then + NFILES=$arg + else + if [ $LNG = 'ua' ] + then + echo 'Треба вказа3ти ціле число файлів після ключа -n' 1>&2 + else + echo 'Expected integer max file number after -n key.' 1>&2 + fi + exit 1 + fi + elif [ $arg = '-n' ] + then + NKEY='1' + else + FNAME=$arg + fi +done + +DIR="$(dirname $FNAME)" +echo "DIR is $DIR" +mkdir -p "$DIR" +if [ $? -ne 0 ] +then + if [ $LNG = 'ua' ] + then + echo "Неможливо збудувати повний путь '$DIR'." 1>&2 + else + echo "Can't create path: '$DIR'." 1>&2 + fi + exit 2 +fi + +if [ -f "$FNAME" ] +then + echo "File '$FNAME' exists. Renaming..." + # loop + NN='0000' + while [ "0" ] + do + FNAME2="$FNAME-"`date +%Y%m%d`-`printf "%04d" $NN` + #echo $FNAME2 + if [ ! -f "$FNAME2" ] + then + break; + fi + let NN=NN+1 + done + mv $FNAME $FNAME2 +fi + +if (( $NFILES > 0 )) +then + echo "NFiles = $NFILES" +#delete old files (not only for current date) +FLIST=$(ls -1 -t $FNAME-????????-????) +#skip NFILES lines, else (if any) - remove +#echo $FLIST +FILEN=0 +while read -r line +do + let FILEN=FILEN+1 + if [[ $FILEN -gt $NFILES ]] + then + echo "Removing old file '$line'..." + rm $line + fi +done <<< $FLIST +fi + +echo "Using output file '$FNAME'..." +echo -n "Date: " > $FNAME +date "+%a, %d %h %Y %T %z" >> $FNAME +echo "---- Hardware ----" >> $FNAME +CPU=$(sudo dmidecode -s processor-version) +echo "CPU: \"$CPU\"" >> $FNAME +MEMGB=$(sudo dmidecode -q | grep -e "Size: [0-9][0-9][0-9][0-9] MB") +MEMGB=$(cut -f2 -d":" <<< $MEMGB) +echo "RAM:$MEMGB" >> $FNAME +MBOARD="\"$(sudo dmidecode -s baseboard-manufacturer)\", \"$(sudo dmidecode -s baseboard-product-name)\"" +echo "Motherboard: $MBOARD" >> $FNAME +SSN=$(sudo dmidecode -s system-serial-number) +echo "System serial number: $SSN" >> $FNAME + +echo "---- System ----" >> $FNAME +OS_ABOUT=$(hostnamectl | grep "Operating System") +OS_ABOUT=${OS_ABOUT:20} +echo "OS Distribution: \"$OS_ABOUT\"" >> $FNAME +KERNEL_VER=$(uname -r) +echo "Kernel Version: $KERNEL_VER" >> $FNAME +HOST_NAME=$(hostname) +echo "Hostname: $HOST_NAME" >> $FNAME + +echo "---- Network ----" >> $FNAME +IFLIST=$(ls -1 /sys/class/net/) + +while read -r line +do + echo -n $line >> $FNAME + IPLINE=$(ip address show dev $line | grep "inet ") + if [ -n "$IPLINE" ] + then + #IPADDR=$(cut -f6 -d" " <<< $IPLINE) + IPADDR=$(awk '{ print $2}' <<< $IPLINE) + else + IPADDR="-/-" + fi + echo ": $IPADDR" >> $FNAME +done <<< $IFLIST + + +echo "---- \"EOF\" ----" >> $FNAME +echo "Done.Buy!" From d823d09c87703c0076b275f88f43bb658a36d026 Mon Sep 17 00:00:00 2001 From: "Oleg.Khokhlov" Date: Wed, 24 Oct 2018 13:22:25 +0300 Subject: [PATCH 4/6] Lesson03: task2.sh shell installator for task1.sh Signed-off-by: Oleg.Khokhlov --- 03-bash/addsyspath.sh | 31 ++++++++++++++++ 03-bash/apps-bin-path.sh | 6 +++ 03-bash/task1.sh | 2 + 03-bash/task2.sh | 80 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100755 03-bash/addsyspath.sh create mode 100644 03-bash/apps-bin-path.sh diff --git a/03-bash/addsyspath.sh b/03-bash/addsyspath.sh new file mode 100755 index 0000000..703e2db --- /dev/null +++ b/03-bash/addsyspath.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +path_to_add=/usr/local/bin + +if [ -n "$1" ] +then + path_to_add=$1 +fi + +nnn=1 +while [ 0 ] +do + pathn=$(cut -f$nnn -d":" <<< $PATH) + if [ ! -n "$pathn" ]; then + break + fi + if [ $pathn = "$path_to_add" ] + then + echo "$path_to_add already in the PATH." + exit 0 + fi + let nnn=nnn+1 +done + +echo "Adding $path_to_add to PATH..." +export PATH=$PATH:${path_to_add} + +if [ -n "$2" ] +then + cp $0 "/etc/profile.d/$2" +fi diff --git a/03-bash/apps-bin-path.sh b/03-bash/apps-bin-path.sh new file mode 100644 index 0000000..b97928d --- /dev/null +++ b/03-bash/apps-bin-path.sh @@ -0,0 +1,6 @@ + +path_to_add="/usr/local/bin" +if [ -n "${PATH##*${path_to_add}}" ] +then + export PATH=$PATH:${path_to_add} +fi diff --git a/03-bash/task1.sh b/03-bash/task1.sh index 032be2e..28bb956 100755 --- a/03-bash/task1.sh +++ b/03-bash/task1.sh @@ -1,4 +1,6 @@ #!/bin/bash +# LESSON03: task1.sh - system information + # check lang LNG='en' SYS_LANG=${LANG::5} diff --git a/03-bash/task2.sh b/03-bash/task2.sh index a9bf588..58a3f16 100755 --- a/03-bash/task2.sh +++ b/03-bash/task2.sh @@ -1 +1,81 @@ #!/bin/bash +# INSTALLER for task1.sh + +# check lang +LNG='en' +SYS_LANG=${LANG::5} +if [ "$SYS_LANG" = "uk_UA" ] +then + LNG='ua' +fi + +# check and parse command line arguments +for arg +do + if [ $arg = '-h' ] || [ $arg = '--help' ] + then + if [ $LNG = 'ua' ] + then + echo 'Завдання03: учбовий скрип shell: інсталляція скрипта task1.sh інформації про систему' + else + echo 'Lesson03: educative shell script: system info task1.sh installator' + fi + exit 0 + else + if [ $LNG = 'ua' ] + then + echo 'Некоректні параметри командного рядка' 1>&2 + else + echo 'Illegal command line arguments' 1>&2 + fi + exit 1 + fi +done + +DIR=/usr/local/bin +PROGNAME=task1.sh + +if [ ! -f "$PROGNAME" ] +then + if [ $LNG = 'ua' ] + then + echo "Програмний файл $PROGNAME не знайдено" 1>&2 + else + echo "Can't find file $PROGAME" 1>&2 + fi + exit 1 +fi + +echo "Installing $PROGNAME into $DIR..." +mkdir -p "$DIR" +if [ $? -ne 0 ] +then + if [ $LNG = 'ua' ] + then + echo "Неможливо збудувати повний путь '$DIR'." 1>&2 + else + echo "Can't create path: '$DIR'." 1>&2 + fi + exit 2 +fi + +cp "$PROGNAME" "$DIR/" +#check copy result +if [ $? -ne 0 ] +then + if [ $LNG = 'ua' ] + then + echo "Неможливо встановити файл $PROGNAME у каталог '$DIR'." 1>&2 + else + echo "Can't install $PROGNAME into '$DIR'." 1>&2 + fi + exit 2 +fi + +#set read and execute for all. write only for owner +chmod 755 "$DIR/$RPOGNAME" + +#add $DIR to system path +./addsyspath.sh "$DIR" "path_to_task1.sh" + +echo "Done.Buy!" From d8c92660552444340e8ec6e0627335e3caf888cc Mon Sep 17 00:00:00 2001 From: "Oleg.Khokhlov" Date: Thu, 25 Oct 2018 16:28:16 +0300 Subject: [PATCH 5/6] Lesson03: make - cook-it and make_simplest correction Signed-off-by: Oleg.Khokhlov --- 03-bash/README1.md | 1 - 03-bash/apps-bin-path.sh | 6 ------ 03-make/cook-it/Makefile | 12 ++++++++++++ 03-make/cook-it/boil | 3 +++ 03-make/cook-it/fried_onion | 4 ++++ 03-make/cook-it/fry | 3 +++ 03-make/cook-it/fry_onion.sh | 8 ++++++++ 03-make/cook-it/meat | 6 ++++++ 03-make/cook-it/oil | 3 +++ 03-make/cook-it/onion | 3 +++ 03-make/cook-it/pilaf | 16 ++++++++++++++++ 03-make/cook-it/pilaf.sh | 15 +++++++++++++++ 03-make/cook-it/rice | 3 +++ 03-make/cook-it/sause | 3 +++ 03-make/cook-it/soup | 19 +++++++++++++++++++ 03-make/cook-it/soup.sh | 17 +++++++++++++++++ 03-make/cook-it/spices | 3 +++ 03-make/cook-it/walnuts | 3 +++ 03-make/cook-it/water | 4 ++++ 03-make/make_simplest/Makefile | 4 +++- 03-make/read | 1 - 21 files changed, 128 insertions(+), 9 deletions(-) delete mode 100644 03-bash/README1.md delete mode 100644 03-bash/apps-bin-path.sh create mode 100644 03-make/cook-it/Makefile create mode 100755 03-make/cook-it/boil create mode 100644 03-make/cook-it/fried_onion create mode 100755 03-make/cook-it/fry create mode 100755 03-make/cook-it/fry_onion.sh create mode 100755 03-make/cook-it/meat create mode 100755 03-make/cook-it/oil create mode 100755 03-make/cook-it/onion create mode 100644 03-make/cook-it/pilaf create mode 100755 03-make/cook-it/pilaf.sh create mode 100755 03-make/cook-it/rice create mode 100755 03-make/cook-it/sause create mode 100644 03-make/cook-it/soup create mode 100755 03-make/cook-it/soup.sh create mode 100755 03-make/cook-it/spices create mode 100755 03-make/cook-it/walnuts create mode 100755 03-make/cook-it/water delete mode 100644 03-make/read diff --git a/03-bash/README1.md b/03-bash/README1.md deleted file mode 100644 index 8d1c8b6..0000000 --- a/03-bash/README1.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/03-bash/apps-bin-path.sh b/03-bash/apps-bin-path.sh deleted file mode 100644 index b97928d..0000000 --- a/03-bash/apps-bin-path.sh +++ /dev/null @@ -1,6 +0,0 @@ - -path_to_add="/usr/local/bin" -if [ -n "${PATH##*${path_to_add}}" ] -then - export PATH=$PATH:${path_to_add} -fi diff --git a/03-make/cook-it/Makefile b/03-make/cook-it/Makefile new file mode 100644 index 0000000..e015305 --- /dev/null +++ b/03-make/cook-it/Makefile @@ -0,0 +1,12 @@ + +AMOUNT?=1 + +soup: soup.sh water meat rice fried_onion walnuts sause spices + @./soup.sh $(AMOUNT) > $@ + +fried_onion: oil onion + @./fry_onion.sh $(AMOUNT) >$@ + +pilaf: pilaf.sh water rice meat fried_onion spices + @./pilaf.sh $(AMOUNT) >$@ + diff --git a/03-make/cook-it/boil b/03-make/cook-it/boil new file mode 100755 index 0000000..3723257 --- /dev/null +++ b/03-make/cook-it/boil @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Положить в воду и варить $1 минут" diff --git a/03-make/cook-it/fried_onion b/03-make/cook-it/fried_onion new file mode 100644 index 0000000..200d4cc --- /dev/null +++ b/03-make/cook-it/fried_onion @@ -0,0 +1,4 @@ +- Возьмите чистую сковородку +- Налейте 1.0 мл подсолнечного масла +- Почистите лук репчатый (около 2 гр) и мелко нарежте +- Положите все на сковородку и жарте 15 минут, периодически помешивая diff --git a/03-make/cook-it/fry b/03-make/cook-it/fry new file mode 100755 index 0000000..ef564ae --- /dev/null +++ b/03-make/cook-it/fry @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Положите все на сковородку и жарте $1 минут, периодически помешивая" diff --git a/03-make/cook-it/fry_onion.sh b/03-make/cook-it/fry_onion.sh new file mode 100755 index 0000000..15b4ab5 --- /dev/null +++ b/03-make/cook-it/fry_onion.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +A=$1 + +echo "- Возьмите чистую сковородку" +./oil $(bc -q <<< "$A*0.5") +./onion $(bc -q <<< "$A") +./fry 15 diff --git a/03-make/cook-it/meat b/03-make/cook-it/meat new file mode 100755 index 0000000..a299a37 --- /dev/null +++ b/03-make/cook-it/meat @@ -0,0 +1,6 @@ +#!/bin/bash + +echo "- Возмите $1 кг мяса" +echo "- Промойте мясо" +echo "- Нарежте мясо кубиками" + diff --git a/03-make/cook-it/oil b/03-make/cook-it/oil new file mode 100755 index 0000000..e19cd26 --- /dev/null +++ b/03-make/cook-it/oil @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Налейте $1 мл подсолнечного масла" diff --git a/03-make/cook-it/onion b/03-make/cook-it/onion new file mode 100755 index 0000000..0fa9b58 --- /dev/null +++ b/03-make/cook-it/onion @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Почистите лук репчатый (около $1 гр) и мелко нарежте" diff --git a/03-make/cook-it/pilaf b/03-make/cook-it/pilaf new file mode 100644 index 0000000..69ccbda --- /dev/null +++ b/03-make/cook-it/pilaf @@ -0,0 +1,16 @@ +Рецепт приготовления 1 кг плова +- Возмите .25 кг мяса +- Промойте мясо +- Нарежте мясо кубиками +- Положите все на сковородку и жарте 10 минут, периодически помешивая +- Возьмите чистую сковородку +- Налейте 50.0 мл подсолнечного масла +- Почистите лук репчатый (около 100 гр) и мелко нарежте +- Положите все на сковородку и жарте 15 минут, периодически помешивая +- Положить в воду 150 гр промытого риса +- Положить в воду и варить 10 минут +- Добавьте обжаренное мясо, лук и морковь +- Положить в воду и варить 15 минут +- Добавьте соус ткемали ( гр) +- Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу +- Добавьте зелень. Плов готов! diff --git a/03-make/cook-it/pilaf.sh b/03-make/cook-it/pilaf.sh new file mode 100755 index 0000000..4287b47 --- /dev/null +++ b/03-make/cook-it/pilaf.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +A=$1 + +echo "Рецепт приготовления $A кг плова" +./meat $(bc -q <<< "$A*0.25") +./fry 10 +./fry_onion.sh $(bc -q <<< "$A*100") +./rice $(bc -q <<< "$A*150") +./boil 10 +echo "- Добавьте обжаренное мясо, лук и морковь" +./boil 15 +./sause +./spices +echo "- Добавьте зелень. Плов готов!" diff --git a/03-make/cook-it/rice b/03-make/cook-it/rice new file mode 100755 index 0000000..5a595de --- /dev/null +++ b/03-make/cook-it/rice @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Положить в воду $1 гр промытого риса" diff --git a/03-make/cook-it/sause b/03-make/cook-it/sause new file mode 100755 index 0000000..82c7b9d --- /dev/null +++ b/03-make/cook-it/sause @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Добавьте соус ткемали ($1 гр)" diff --git a/03-make/cook-it/soup b/03-make/cook-it/soup new file mode 100644 index 0000000..6150820 --- /dev/null +++ b/03-make/cook-it/soup @@ -0,0 +1,19 @@ +Рецепт приготовления 2 л супа-харчо +- Взять подходящую кастрюлю и налить 1.6 л очищенной воды +- Поставить кастрюлю на огонь +- Возмите .50 кг мяса +- Промойте мясо +- Нарежте мясо кубиками +- Положить в воду и варить 120 минут +- Положить в воду 300 гр промытого риса +- Положить в воду и варить 15 минут +- Возьмите чистую сковородку +- Налейте 100.0 мл подсолнечного масла +- Почистите лук репчатый (около 200 гр) и мелко нарежте +- Положите все на сковородку и жарте 15 минут, периодически помешивая +- Добавьте 250 гр очищенных и измельченных грецких орехов +- Положите лук и орехи в бульон +- Добавьте соус ткемали ( гр) +- Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу +- Положить в воду и варить 5 минут +- Добавьте зелень. Суп харчо готов! diff --git a/03-make/cook-it/soup.sh b/03-make/cook-it/soup.sh new file mode 100755 index 0000000..5788a30 --- /dev/null +++ b/03-make/cook-it/soup.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +A=$1 + +echo "Рецепт приготовления $A л супа-харчо" +./water $(bc -q <<< "$A*0.8") +./meat $(bc -q <<< "$A*0.25") +./boil 120 +./rice $(bc -q <<< "$A*150") +./boil 15 +./fry_onion.sh $(bc -q <<< "$A*100") +./walnuts $(bc -q <<< "$A*125") +echo "- Положите лук и орехи в бульон" +./sause +./spices +./boil 5 +echo "- Добавьте зелень. Суп харчо готов!" diff --git a/03-make/cook-it/spices b/03-make/cook-it/spices new file mode 100755 index 0000000..401788a --- /dev/null +++ b/03-make/cook-it/spices @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу" diff --git a/03-make/cook-it/walnuts b/03-make/cook-it/walnuts new file mode 100755 index 0000000..7fe8282 --- /dev/null +++ b/03-make/cook-it/walnuts @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Добавьте $1 гр очищенных и измельченных грецких орехов" diff --git a/03-make/cook-it/water b/03-make/cook-it/water new file mode 100755 index 0000000..70d1d7d --- /dev/null +++ b/03-make/cook-it/water @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "- Взять подходящую кастрюлю и налить $1 л очищенной воды" +echo "- Поставить кастрюлю на огонь" diff --git a/03-make/make_simplest/Makefile b/03-make/make_simplest/Makefile index 041a514..44cb891 100644 --- a/03-make/make_simplest/Makefile +++ b/03-make/make_simplest/Makefile @@ -1,3 +1,4 @@ +.PHONY: clean hello: main.o gcc -o hello main.o -lc @@ -6,4 +7,5 @@ main.o: main.c gcc -c main.c -o main.o clean: - -rm *.o main a.out + -@rm *.o hello + @echo "Cleanup Done!" diff --git a/03-make/read b/03-make/read deleted file mode 100644 index 8d1c8b6..0000000 --- a/03-make/read +++ /dev/null @@ -1 +0,0 @@ - From 066c8aa0443b3ae9d04d2ca6830a85ea56d23391 Mon Sep 17 00:00:00 2001 From: "Oleg.Khokhlov" Date: Sat, 27 Oct 2018 12:49:47 +0300 Subject: [PATCH 6/6] Lesson03: Improved version of cook-it. Added `tea` and `all` rules Signed-off-by: Oleg.Khokhlov --- 03-make/cook-it/Makefile | 8 ++++++++ 03-make/cook-it/boil | 2 +- 03-make/cook-it/fried_onion | 4 ++-- 03-make/cook-it/fry_onion | 8 ++++++++ 03-make/cook-it/pilaf | 6 +++--- 03-make/cook-it/pilaf.sh | 2 +- 03-make/cook-it/soup | 22 +++++++++++----------- 03-make/cook-it/soup.sh | 6 ++++-- 03-make/cook-it/tea | 6 ++++++ 9 files changed, 44 insertions(+), 20 deletions(-) create mode 100755 03-make/cook-it/fry_onion create mode 100644 03-make/cook-it/tea diff --git a/03-make/cook-it/Makefile b/03-make/cook-it/Makefile index e015305..b2e4741 100644 --- a/03-make/cook-it/Makefile +++ b/03-make/cook-it/Makefile @@ -1,6 +1,8 @@ AMOUNT?=1 +all: soup pilaf tea + soup: soup.sh water meat rice fried_onion walnuts sause spices @./soup.sh $(AMOUNT) > $@ @@ -10,3 +12,9 @@ fried_onion: oil onion pilaf: pilaf.sh water rice meat fried_onion spices @./pilaf.sh $(AMOUNT) >$@ +tea: water boil + @echo "Рецепт приготовления $(AMOUNT) л чая" > $@ + @./water $(AMOUNT) >>$@ + @echo "- Взять 50 гр чайного листа" >> $@ + @./boil 1 >> $@ + @echo "- Добавить сахар по вкусу. Чай готов!" >> $@ diff --git a/03-make/cook-it/boil b/03-make/cook-it/boil index 3723257..6e9928d 100755 --- a/03-make/cook-it/boil +++ b/03-make/cook-it/boil @@ -1,3 +1,3 @@ #!/bin/bash -echo "- Положить в воду и варить $1 минут" +echo "- Положить в воду, довести до кипения и варить $1 минут" diff --git a/03-make/cook-it/fried_onion b/03-make/cook-it/fried_onion index 200d4cc..d87baf3 100644 --- a/03-make/cook-it/fried_onion +++ b/03-make/cook-it/fried_onion @@ -1,4 +1,4 @@ - Возьмите чистую сковородку -- Налейте 1.0 мл подсолнечного масла -- Почистите лук репчатый (около 2 гр) и мелко нарежте +- Налейте 50.0 мл подсолнечного масла +- Почистите лук репчатый (около 100 гр) и мелко нарежте - Положите все на сковородку и жарте 15 минут, периодически помешивая diff --git a/03-make/cook-it/fry_onion b/03-make/cook-it/fry_onion new file mode 100755 index 0000000..15b4ab5 --- /dev/null +++ b/03-make/cook-it/fry_onion @@ -0,0 +1,8 @@ +#!/bin/bash + +A=$1 + +echo "- Возьмите чистую сковородку" +./oil $(bc -q <<< "$A*0.5") +./onion $(bc -q <<< "$A") +./fry 15 diff --git a/03-make/cook-it/pilaf b/03-make/cook-it/pilaf index 69ccbda..26d81d0 100644 --- a/03-make/cook-it/pilaf +++ b/03-make/cook-it/pilaf @@ -8,9 +8,9 @@ - Почистите лук репчатый (около 100 гр) и мелко нарежте - Положите все на сковородку и жарте 15 минут, периодически помешивая - Положить в воду 150 гр промытого риса -- Положить в воду и варить 10 минут +- Положить в воду, довести до кипения и варить 10 минут - Добавьте обжаренное мясо, лук и морковь -- Положить в воду и варить 15 минут -- Добавьте соус ткемали ( гр) +- Положить в воду, довести до кипения и варить 15 минут +- Добавьте соус ткемали (50 гр) - Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу - Добавьте зелень. Плов готов! diff --git a/03-make/cook-it/pilaf.sh b/03-make/cook-it/pilaf.sh index 4287b47..25733d6 100755 --- a/03-make/cook-it/pilaf.sh +++ b/03-make/cook-it/pilaf.sh @@ -10,6 +10,6 @@ echo "Рецепт приготовления $A кг плова" ./boil 10 echo "- Добавьте обжаренное мясо, лук и морковь" ./boil 15 -./sause +./sause $(bc -q <<< "$A*50") ./spices echo "- Добавьте зелень. Плов готов!" diff --git a/03-make/cook-it/soup b/03-make/cook-it/soup index 6150820..bf3c8a3 100644 --- a/03-make/cook-it/soup +++ b/03-make/cook-it/soup @@ -1,19 +1,19 @@ -Рецепт приготовления 2 л супа-харчо -- Взять подходящую кастрюлю и налить 1.6 л очищенной воды +Рецепт приготовления 1 л супа-харчо +- Взять подходящую кастрюлю и налить .8 л очищенной воды - Поставить кастрюлю на огонь -- Возмите .50 кг мяса +- Возмите .25 кг мяса - Промойте мясо - Нарежте мясо кубиками -- Положить в воду и варить 120 минут -- Положить в воду 300 гр промытого риса -- Положить в воду и варить 15 минут +- Положить в воду, довести до кипения и варить 120 минут +- Положить в воду 150 гр промытого риса +- Положить в воду, довести до кипения и варить 15 минут - Возьмите чистую сковородку -- Налейте 100.0 мл подсолнечного масла -- Почистите лук репчатый (около 200 гр) и мелко нарежте +- Налейте 50.0 мл подсолнечного масла +- Почистите лук репчатый (около 100 гр) и мелко нарежте - Положите все на сковородку и жарте 15 минут, периодически помешивая -- Добавьте 250 гр очищенных и измельченных грецких орехов +- Добавьте 125 гр очищенных и измельченных грецких орехов - Положите лук и орехи в бульон -- Добавьте соус ткемали ( гр) +- Добавьте соус ткемали (100 гр) - Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу -- Положить в воду и варить 5 минут +- Положить в воду, довести до кипения и варить 5 минут - Добавьте зелень. Суп харчо готов! diff --git a/03-make/cook-it/soup.sh b/03-make/cook-it/soup.sh index 5788a30..f7102da 100755 --- a/03-make/cook-it/soup.sh +++ b/03-make/cook-it/soup.sh @@ -8,10 +8,12 @@ echo "Рецепт приготовления $A л супа-харчо" ./boil 120 ./rice $(bc -q <<< "$A*150") ./boil 15 -./fry_onion.sh $(bc -q <<< "$A*100") +#./fry_onion.sh $(bc -q <<< "$A*100") +make -s -B fried_onion AMOUNT="$A*100" > /dev/null +cat fried_onion ./walnuts $(bc -q <<< "$A*125") echo "- Положите лук и орехи в бульон" -./sause +./sause $(bc -q <<< "$A*100") ./spices ./boil 5 echo "- Добавьте зелень. Суп харчо готов!" diff --git a/03-make/cook-it/tea b/03-make/cook-it/tea new file mode 100644 index 0000000..745d577 --- /dev/null +++ b/03-make/cook-it/tea @@ -0,0 +1,6 @@ +Рецепт приготовления 1 л чая +- Взять подходящую кастрюлю и налить 1 л очищенной воды +- Поставить кастрюлю на огонь +- Взять 50 гр чайного листа +- Положить в воду, довести до кипения и варить 1 минут +- Добавить сахар по вкусу. Чай готов!