LINUX.ORG.RU

проблема со сценарием на bash

 , ,


0

1

Добрый день! Я изучаю Unix самостоятельно по книге и сейчас у меня возникла проблема с одним из заданий: «Напишите сценарий, анализирующий с помощью case список пользователей, находящихся в настоящий момент в системе. Если имеется хотя бы один сеанс root, должно выдаваться предупреждающее сообщение.»

Командой who | awk {'print $1'} я получаю строку из пользователей находящихся в данный момент в системе.

Или же командой ps -all | awk {'print $3'} я получу строку из UID.

Вопрос в следующем, мне надо читать это строку по очереди? Т.е. взять первое слово из строки и проверить входит ли оно в «root», потом второе и так далее. Цикл for еще не проходился, поэтому я его типа не знаю.


Ответ на: комментарий от ziemin
CT=$(awk -F: '/$QW/{print $6}' /test.txt)[/bash]

Есть переменная QW. Вопрос как мне её заэкранировать?

CT=$(awk -F: '/ZENIT/{print $6}' /test.txt)[/bash]
когда так задаю, все работает, а как только пытаюсь вставить переменную, выдается 6 столбец из файла.
patr88
() автор топика
Ответ на: комментарий от patr88

Я не знаю, что за двоеточия и что за F, но могу сказать одно - одинарные кавычки экранируют всё. Двойные только очеввидные весчи. Впрочем как и скобки.

ziemin ★★
()
Ответ на: комментарий от anonymous
 CT=$(awk -F: /$QW/'{print $6}' /test.txt) [/bash]
когда сделал так,то заработало

можешь прокомментировтаь свое?
patr88
() автор топика
Ответ на: комментарий от patr88
  • #!/bin/bash - выбор интерпретатора
  • var - переменная в bash скрипте
  • = - запись в переменную значения
  • "(^2)|(4$)" - собственно значение, в будущем контексте - паттерн для регулярного выражения, отбирающего только строки начинающиеся (^) с 2 или заканчивающиеся ($) на 4
  • seq 20 - возвращает список цифр от 1 до 20
  • | - перенаправление потоков от одного процесса к другому
  • awk - интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока по заданным шаблонам (wikipedia)
  • -v - опция, за которой идет конструкция переменная=значение, представляет собой присваивание, которое должно быть сделано перед выполнением программы (opennet)
  • p="$var" - записываем в переменную awk скрипта значение переменной var bash скрипта
  • ' - начало строки в bash которая будет скриптом awk
  • $0 - полное значение входящей строки в awk скрипте
  • ~ - выражение отношения «содержится», регулярное выражение должно быть справа от ~ (opennet)
  • p - переменная awk скрипта, в которой находится значение переменной var bash скрипта, в которой находится паттерн регулярного выражения (смотри пункт 4)
  • ' - конец строки в bash
anonymous
()
Ответ на: комментарий от anonymous

спасибо за проделанную работу, но твой пример только больше меня запутывает (есть несколько ненужных для примера операций). у меня была конкретная проблема. с конкретными переменными. код тут не 50+ строк. В моем конкретном случае было достаточно перенести одинарную кавычку.

patr88
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.