Параметры командной строки с аргументом в сценарии оболочки

[118063]С одной стороны, первый метод вызывает [118527]tail[118528] дважды, поэтому он должен сделать больше работы, чем второй метод, который делает это только один раз. С другой стороны, второй метод должен скопировать данные в оболочку и затем отступить, поэтому он должен выполнить больше работы, чем первый метод, в котором [118529] хвост [118530] напрямую соединен с [118531] grep [118532]. Первый метод имеет дополнительное преимущество на многопроцессорной машине: [118533] grep[118534] может работать параллельно с [118535] tail[118536], в то время как второй метод строго сериализован, сначала [118537] tail[118538], затем [118539] grep[118540].

Поэтому нет очевидной причины, почему один из них должен быть быстрее другого.

Если вы хотите посмотреть, что происходит, посмотрите, как система называет оболочку. Попробуйте и с разными оболочками.

В методе 1 основные стадии:

tail[119218] читает и ищет свою отправную точку.

tail[119220] записывает 4096-байтные куски, которые [119221]grep[119222] читает так же быстро, как и они произведены.

smb://username:password@192.168.0.1/ *or whatever your volume's IP is.*

Повторите предыдущий этап для второй строки поиска.

В методе 2 основные стадии:

  • tail[119224] читает и ищет свою отправную точку.
  • tail[119226] записывает 4096-байтовые куски, которые бэш читает 128 байт за раз, а zsh читает 4096 байт за раз.
  • Bash или zsh записывают 4096-байтовые куски, которые [119227]grep[119228] читает так же быстро, как и они произведены.
  • Повторите предыдущий шаг для второй строки поиска.
  • 128-байтовые куски Бэша при чтении вывода подстановки команды значительно замедляют его; zsh выходит примерно так же быстро, как и метод 1 для меня. Ваш пробег может варьироваться в зависимости от типа и номера процессора, конфигурации планировщика, версий используемых инструментов и размера данных.[118078].

2
17.04.2015, 16:03
2 ответа
[1182144-

Если вы хотите использовать Getoptts (отметили, что «S»), чтобы получить аргументы командной строки, вы можете сделать что-то вроде

while getopts "i:n:e:" OPT; do
    case "$OPT" in
        i)
            # do stuff with the i option
            ID="$OPTARG"
            ;;
        n)
            # do stuff with the n option
            ;;
        e)
            # do stuff with the e option
            ;;
    esac
done

Гластопты занимают 2 аргумента, строка, говоря Параметры должны искать и имя переменной для хранения текущего параметра, которую он нашел в. Строка, чтобы сказать ему, какие варианты искать, это письмо для краткого варианта, и если это позже сопровождается толстой китой. Опция берет аргумент, это не просто флаг, который установлен.

2
27.01.2020, 22:12

Это довольно простое. Вы можете пройти имя в качестве аргумента.

#!/bin/bash

UNIXID=$1

ldapsearch -x "(cn=$UNIXID)" | awk '/givenName/||/mobile/||/mail/'

#####################


#./lsearch in15004

givenName: Mr. Xyz

mail: x@abc.com

mobile: 9xxxxxxxx1
0
27.01.2020, 22:12

Теги

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