Попытка заставить эту программу печатать только имена пользователей длиной от 5 до 10 символов [закрыто]

en lugar de echo usa printf, este no agrega "\n" por defecto

tenga en cuenta que printf es un comando de bash, así que asegúrese de que su shell lo admita

-2
11.12.2018, 00:08
4 ответа
getent passwd | awk -F : 'length($1) >= 5 && length($1) <= 10 { print $1 }'

Будут напечатаны имена пользователей длиной от 5 до 10 символов (включительно ).

Для самых коротких и самых длинных имен:

getent passwd |
awk -F : 's == "" || length($1) < length(s) { s = $1 }
          l == "" || length($1) > length(l) { l = $1 }
          END { printf("shortest: %s (%d chars)\n", s, length(s))
                printf("longest:  %s (%d chars)\n", l, length(l)) }'

Выполнение обеих операций за один проход по базе данных паролей (в виде полного bashскрипта, хотя /bin/shэтого должно было быть более чем достаточно, поскольку этот скрипт не использует bashничего конкретного, любая оболочка сможет его запустить):

#!/bin/bash
getent passwd |
awk -F : 'length($1) >= 5 && length($1) <= 10 { print $1 }
          s == "" || length($1) < length(s)   { s = $1   }
          l == "" || length($1) > length(l)   { l = $1   }
          END { printf("shortest: %s (%d chars)\n", s, length(s))
                printf("longest:  %s (%d chars)\n", l, length(l)) }'
3
28.01.2020, 05:15

Вот ваше домашнее задание:

#!/bin/bash
for NAME in $(cut -d: -f1 < /etc/passwd)
do
        if [[ ${#NAME} -gt 10 || ${#NAME} -lt 5 ]]
        then
                continue
        else
                echo "Username in the system is: $NAME"
                echo "Its length Is ${#NAME}"
        fi
done

Пожалуйста.

0
28.01.2020, 05:15

Непрактичный, но несколько завораживающий :bash расширенные шаблоны файлов:

shopt -s extglob

getent passwd | 
  cut -d: -f1 | 
  while IFS= read -r name; do 
    [[ $name == ?????@(|?|??|???|????|?????) ]] && echo "$name"
  done
1
28.01.2020, 05:15

Для большего разнообразия cutиgrep:

getent passwd | cut -d: -f1 | grep -Ex '.{5,10}'

Это извлекает записи пароля, вырезает первое поле (имя пользователя ), затем запрашивает у grep совпадение расширенного регулярного выражения, которое охватывает всю строку (-x), где есть от 5 до 10 любых символов (.).

0
28.01.2020, 05:15

Теги

Похожие вопросы