Вам не нужен 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}"
... просто чтобы покрыть все ваши основы.
Чтобы перечислить все процессы пользователями, за исключением команды, которые мы использовали для создания списка, вы можете использовать:
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 результатов.
для вашего первого вопроса, вы можете использовать команду -c для Греп, который дает вам счетчик матчей.
ps -ef | grep -v "grep" | grep -c "username"
Это перечисляет все процессы, затем удаляет сам GREP (не учитывайте, что мы используем, чтобы получить список), а затем получить общий счет, который находятся из вашего имени пользователя.
Для первого вопроса вы можете использовать PS
с возможностью ниже, чтобы переписать все процессы, которые работают с вашим именем пользователя.
$ ps -o pid,uid -u 1000|wc -l
Вы можете заменить значение 1000
с UID вашего пользователя. Я добавил только PID
и UID
для отображения . Вы можете любой больше из них.
Для второго случая такой же как первый
$ ps -o pid,uid -u 1000 > process.list