🏠 Домашнее задание 9

К оглавлению урока

⚡ ДЗ коротко

Создать myfirstbashscript.sh в JSLinux. Скрипт: USER=имя, вывести дату, hello $USER!, pwd, количество процессов bioset (без grep), права /etc/passwd через awk. Отправить файл через export_file.

# myfirstbashscript.sh
#!/bin/bash
USER=Andrew
date
echo "hello $USER!"
pwd
ps -ef | grep bioset | grep -v grep | wc -l
ls -la /etc/passwd | awk '{print $1}'

Текст задания (из LMS)

Linux: Домашнее задание 9 (Python)

Работаем в JSLinux.

  1. Создайте файл myfirstbashscript.sh где угодно.
  2. Сделайте его исполняемым.
  3. Заведите новую переменную USER и присвойте ей ваше имя в качестве значения.
  4. Добавьте в скрипт все необходимое, чтобы он:
    • Написал дату
    • Поприветствовал Вас по имени (hello $USER!)
    • Написал, из какой директории он работает
    • Добавил количество процессов с именем bioset одним числом (не учитывая процесс grep)
    • Вывел права на файл /etc/passwd в формате (-rw-r--r--) — и только эту часть (потребуется awk)
  5. Экспортируйте и пришлите результирующий файл, желательно в формате txt.

Что вам понадобится: echo, pwd, ps -ef, date, grep (и флаг -v не забываем!), wc -l, awk '{print $НОМЕР СТОЛБЦА}', export_file

Подготовка окружения

Работаем в JSLinux — браузерная Linux-песочница (не нужна установка).

  1. Откройте JSLinux в браузере
  2. Выберите дистрибутив (например, Alpine Linux)
  3. В открывшемся терминале вы можете сразу начать вводить команды
# Проверить, что мы в терминале
pwd

Пошаговое решение

Шаг 1: Создать файл скрипта

# Создать файл в текстовом редакторе vi
vi myfirstbashscript.sh

# Или через nano (проще для начинающих)
nano myfirstbashscript.sh

Шаг 2: Написать содержимое скрипта

Вставьте следующий код в файл (в vi: нажмите i для перехода в режим вставки):

Файл: myfirstbashscript.sh

# myfirstbashscript.sh
#!/bin/bash
USER=Andrew
date
echo "hello $USER!"
pwd
ps -ef | grep bioset | grep -v grep | wc -l
ls -la /etc/passwd | awk '{print $1}'

В vi сохранить и выйти: Esc:wqEnter
В nano: Ctrl+XYEnter

Шаг 3: Сделать файл исполняемым

chmod +x myfirstbashscript.sh

# Проверить, что права установлены
ls -la myfirstbashscript.sh

В строке прав должен быть символ x: -rwxr-xr-x

Шаг 4: Запустить скрипт

./myfirstbashscript.sh

Ожидаемый вывод:

Fri Nov 22 12:34:56 UTC 2024
hello Andrew!
/root
0
-rw-r--r--

Шаг 5: Экспортировать файл

# Скопировать скрипт в текстовый файл для отправки
cp myfirstbashscript.sh myfirstbashscript.txt

# Экспортировать через JSLinux
export_file myfirstbashscript.txt

Браузер предложит скачать файл — его и нужно отправить преподавателю.

Разбор каждой строки скрипта

#!/bin/bash — шебанг

Первая строка скрипта. Указывает операционной системе, каким интерпретатором запускать файл. /bin/bash — путь к интерпретатору Bash. Без shebang скрипт может запуститься под другой оболочкой с другим синтаксисом.

USER=Andrew — переменная

Создаём переменную USER со значением "Andrew" (замените на своё имя). Важно: нет пробелов вокруг знака =, иначе bash выдаст ошибку. Это локальная переменная скрипта, не системная переменная окружения.

date — вывод текущей даты

Выводит текущую дату и время в формате по умолчанию, например: Fri Nov 22 12:34:56 UTC 2024

echo "hello $USER!" — приветствие

Выводит строку с подстановкой переменной. $USER заменяется значением переменной. Кавычки нужны для корректной работы если в значении переменной есть пробелы.

pwd — текущая директория

Выводит полный путь к текущей директории, из которой запущен скрипт.

ps -ef | grep bioset | grep -v grep | wc -l — количество процессов

Конвейер из 4 команд:

  • ps -ef — список всех процессов в полном формате
  • grep bioset — оставить только строки с "bioset"
  • grep -v grep — убрать строки содержащие слово "grep" (сам процесс поиска)
  • wc -l — посчитать количество оставшихся строк

В JSLinux обычно выводит 0 — процесс bioset там не запущен, но команда работает корректно.

ls -la /etc/passwd | awk '{print $1}' — права файла

Конвейер из 2 команд:

  • ls -la /etc/passwd — подробный список файла: права, владелец, размер, дата, имя
  • awk '{print $1}' — вывести только первый столбец (права) из строки

Пример строки ls -la /etc/passwd: -rw-r--r-- 1 root root 2345 Nov 22 12:00 /etc/passwd

После awk '{print $1}' остаётся только: -rw-r--r--

Связь с теорией урока