Использование команды Grep

Вам не нужен GetOPT , чтобы обрабатывать скрипт длинными вариантами. Функция функция [11444382] функция может сделать это (и обычно без подполей) . Хитрость заключается в использовании - как опция. Таким образом, - сухой пробег (например) становится OPTVAR = - и optarg = -Dry-Run . Вот функциональный пример того, как вы можете сделать это специально для этого случая:

#!/bin/sh
help(){ echo usage; }                       #dummy help
unset   user dryrun pass _o o               #ensure all flag vars are unset
while   getopts :-:u:p:d o              &&  #getopts loop
        o=${o#-}        _o=${o:+$OPTARG}    #empty $o if $o==-
do      case            $o$OPTARG       in  #test concatenated $o$OPTARG
        (u*|-user)      user=${_o:-$2}  ;;  #set $user to $_o or $2
        (p*|-pass)      pass=${_o:-$2}  ;;  #ditto for $pass
        (d*|-dryrun)    o=d dryrun=1    ;;  #no $OPTARG either way - o=d base
        (*)             !  help         ;;  #no usage options met - opt error
        esac || exit                        #quit with error if opt == ! help
        shift "$((!${#o}+(OPTIND-(OPTIND=1))))"  #shift params as they're read
done

Это будет работать так, как есть. На самом деле я попробовал несколько различных вариантов возможностей. Например:

~/getopts.sh -p-user --user me -uyou -d --dry-run

... при запуске w / #! / Bin / sh -x Bangline напечатал это к моему Стдерру:

+ unset user dryrun pass _o o
+ getopts :-:u:p:d o
+ o=p _o=-user
+ pass=-user
+ shift 1
+ getopts :-:u:p:d o
+ o= _o=
+ user=me
+ shift 2
+ getopts :-:u:p:d o
+ o=u _o=you
+ user=you
+ shift 1
+ getopts :-:u:p:d o
+ o=d _o=
+ o=d dryrun=1
+ shift 1
+ getopts :-:u:p:d o
+ o= _o=
+ o=d dryrun=1
+ shift 1
+ getopts :-:u:p:d o

После завершения Plugts Можно просто сделать ...

[ "$((dryrun))" -eq 0 ] && production || dryrun

... Если вы объявили производство () и DRYRUN () функций. Они найдут какие-либо значения командной строки, указанные для Pass $ Pass и / или $ USER . Если любой из них не был объявлен на командной строке, вы можете рассмотреть их, как:

echo "${user=default_username}" "${pass=default_password}"

... просто чтобы покрыть все ваши основы.

0
15.12.2018, 23:57
3 ответа

Чтобы перечислить все процессы пользователями, за исключением команды, которые мы использовали для создания списка, вы можете использовать:

ps -U username -u username u | grep -v ps

он перечисляет все процессы, созданные Имя пользователя Как реальный идентификатор пользователя и эффективный идентификатор пользователя и фильтруют процесс PS , чтобы избежать перечисления команды, используемой для создания списка.

Другой (пользователь и PID):

ps -U username -u username u | grep -v ps | awk  {'print $1, $2'}

awk используется только для отображения столбцов 1 и 2 результатов.

0
28.01.2020, 04:57

для вашего первого вопроса, вы можете использовать команду -c для Греп, который дает вам счетчик матчей.

ps -ef | grep -v "grep" | grep -c "username"

Это перечисляет все процессы, затем удаляет сам GREP (не учитывайте, что мы используем, чтобы получить список), а затем получить общий счет, который находятся из вашего имени пользователя.

0
28.01.2020, 04:57

Для первого вопроса вы можете использовать PS с возможностью ниже, чтобы переписать все процессы, которые работают с вашим именем пользователя.

$ ps -o pid,uid -u 1000|wc -l

Вы можете заменить значение 1000 с UID вашего пользователя. Я добавил только PID и UID для отображения . Вы можете любой больше из них.

Для второго случая такой же как первый

$  ps -o pid,uid -u 1000 > process.list
0
28.01.2020, 04:57

Теги

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