Лабораторная_работа. Лабораторная работа 3. Командный интерпретатор shell
Скачать 20.44 Kb.
|
Лабораторная работа №3. Командный интерпретатор shell. Цель работы: Ознакомиться с набором средств настройки командного интерпретатора shell. Получить навыки написания простейших сценариев командного интерпретатора. Задание 1: Написать скрипт на командном языке bash. В качестве параметра скрипта указывается список имен файлов. разделенных пробелами. Для каждого из файлов: если файл существует, вывести данные о размере, владельце, правах доступа и т.п.; если не существует – выдать соответствующее сообщение. Решение: #!/bin/bash for var in "$@" do echo "$var" if [ -f "$var" ]; then FILESIZE=$(stat -c%s "$var") echo "Размер $var = $FILESIZE байт." USER=$(stat -c '%U' "$var") echo "Владелец $var = $USER." RIGHTS=$(stat -c '%a' "$var") echo "Права доступа $var = $RIGHTS." else echo "$var не существует или отсутствует." fi done; Результат: Задание 2: Написать сценарий, который в зависимости от первого параметра командной строки выдает: а) общее количество зарегистрированных в системе пользователей; б) количество работающих в данный момент в системе пользователей; в) при запуске без параметров или с неверными параметрами – сообщение об ошибке. Примечание. Общим числом зарегистрированных пользователей считать число строк в файле /etc/passwd. Решение: if [[ $1 = "1" ]] then wc /etc/passwd -l elif [[ $1 = "2" ]] then who else echo Ошибка fi 3 Задание: Написать сценарий, определяющий, сколько сеансов указанного пользователя открыто в системе. Если указанный пользователь не присутствует в системе, выдать соответствующее сообщение. Имя пользователя передается в качестве параметра. Решение: #!/bin/bash # str=`w | grep "$1"` echo "insert user" read line w | grep ^$line # `w | grep "$1"` task() { if [[ $str == "" ]] || [[ "$#" -eq "0" ]]; then echo "пользователь отсутствует или не существует" else w | grep "$1" | grep "pts" | wc -l fi } task Результат:_Задание_4'>Результат: Задание 4: В качестве параметра скрипта указывается имя файла. Если в файле не более 10 строк, вывести число символов в нем, иначе – число строк. Решение_:_!/bin/bashif_[[_$(cat_-n_$1_|_grep_$2)_]]_;_thenecho_"Есть"elseecho_"Нет"fiРезультат'>Решение: #!/bin/bash var=`wc -l < $1` if [[ $var -lt 10 ]]; then echo `wc -m < $1` символов else echo `wc -l < $1` строк fi Результат: Задание 5: В качестве параметра скрипта указывается имя файла и ключевое слово. Если ключевое слово присутствует в файле, вывести «Есть», иначе – «Нет». Решение: #!/bin/bash if [[ $(cat -n $1 | grep $2) ]] ; then echo "Есть" else echo "Нет" fi Результат: Задание 6: В качестве параметров скрипта указывается список пользователей (через пробел). Вывести информацию о сеансах тех из них, кто в данный момент работает в системе. Решение: for str in $@ do who | grep $str done Задание 7: Написать скрипт, который печатает количество указанных параметров командной строки. Если не указано ни одного параметра, вывести сообщение об ошибке. Решение: if [[ "$#" -eq "0" ]] then echo Ошибка else echo $# parametrov fi Задание 8: В качестве параметра скрипта указывается имя пользователя. Если пользователь с указанным именем существует, вывести информацию о том, работает ли он в данный момент в системе; иначе – вывести сообщение «Нет такого пользователя» Решение: str=`w | grep "$1"` if [[ $str == "" ]] || [[ "$#" -eq "0" ]] then echo Нет такого пользователя else w | grep "$1" fi Задание 9: Если скрипт запущен без параметров, вывести список активных процессов на экран, иначе – в файл, имя которого указано как параметр. Решение: #!/bin/bash if [[ "$#" -eq "0" ]] then ps -ef else ps -ef > $1 echo "Файл был создан или отредактирован" echo "лог с процессами загружен" fi Результат: Задание 10: Определить, сколько сеансов провел в системе пользователь, имя которого указано в качестве параметра. Решение: #!/bin/bash echo -n "enter user: " read username echo -n "User: $username Session(s): " last | grep ^$username| grep 'logged' | wc -l last | grep ^$username| grep 'logged' exit; Результат: |