Скрипт bash/ksh grep принимает более одного аргумента

   #!/bin/ksh
if [ -n "$1" ]
then
    if grep -w -- "$1" codelist.lst
    then
        true
    else
        echo "Value not Found"
    fi
else
    echo "Please enter a valid input"
fi

Это мой сценарий, и он работает именно так, как я хочу в данный момент, я хочу добавить, если добавлю больше аргументов. Это даст мне несколько выходов. Как я могу это сделать?

Итак, например, я делаю ./test.sh apple, он будет искать яблоко в codelist.lst и даст мне вывод: Apple

Я хочу сделать ./test.sh apple orange и сделаю: Яблоко Апельсин

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать это с помощью shift и цикла, например (работает как в bash, так и в ksh):

for ((i = $#; i > 0 ; i--)) ; do
    echo "Processing '$1'"
    shift
done

Вы заметите, что я также выбрал нет для использования метода [[ -n "$1" ]], так как это приведет к преждевременному завершению цикла с пустой строкой (например, с остановкой ./script.sh a b "" c без выполнения c).

Можно ли совместить if и for вместе? как это в моем сценарии? Если значение найдено = эхо-значение, Если ничего не вставлено в качестве аргумента, Пожалуйста, вставьте значение, Если значение не найдено, эхо-значение не найдено Я сделал это: for ((i = $#; i > 0; i--)) ; do grep -w -- "$1" codelist.lst || echo "'$1' not found" смена выполнена Но как мне поступить иначе echo "Пожалуйста, введите значение"

user1543961 23.04.2022 13:20

@ user1543961, вы можете проверить $# на ноль перед входом в цикл for. Но я вижу, вы задали это как отдельный вопрос, поэтому я пойду и отвечу на него там :-)

paxdiablo 24.04.2022 00:44

Чтобы перебрать позиционные параметры:

for pattern in "$@"; do
  grep -w -- "$pattern" codelist.lst || echo "'$pattern' not Found"
done

Для более сложного использования, при котором grep вызывается только один раз, используйте параметр -f с заменой процесса оболочки:

grep -w -f <(printf '%s\n' "$@") codelist.lst

Вам не нужно -f <(...); аргумент grep может быть несколькими шаблонами, разделенными новой строкой grep -we "$(printf '%s\n' "$@")" или более хитро IFS=$'\n'; grep -we "$*"

dave_thompson_085 23.04.2022 06:47

Другие вопросы по теме