Скрипт 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 и сделаю: Яблоко Апельсин

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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