Выходной код пуст в следующем скрипте. Что ему не хватает? Я пытаюсь Grep строкусценарий оболочки grep для grep строки
#!/bin/ksh
file=$abc_def_APP_13.4.5.2
if grep -q abc_def_APP $file; then
echo "File Found"
else
echo "File not Found"
fi
Выходной код пуст в следующем скрипте. Что ему не хватает? Я пытаюсь Grep строкусценарий оболочки grep для grep строки
#!/bin/ksh
file=$abc_def_APP_13.4.5.2
if grep -q abc_def_APP $file; then
echo "File Found"
else
echo "File not Found"
fi
В bash
, используйте <<<
перенаправление из строки (а 'Here string'):
if grep -q abc_def_APP <<< $file
В других оболочках, возможно, потребуется использовать:
if echo $file | grep -q abc_def_APP
Я положил свой then
на следующей строке; если вы хотите, чтобы ваш then
в той же строке, а затем добавьте ; then
после того, что я написал.
Обратите внимание, что это назначение:
file=$abc_def_APP_13.4.5.2
довольно странным; он принимает значение переменной окружения ${abc_def_APP_13}
и добавляет .4.5.2
до конца (он должен быть env var, так как мы можем видеть начало скрипта). Вы, вероятно, намеревался написать:
file=abc_def_APP_13.4.5.2
В общем, вы должны приложить ссылки переменных, содержащих имена файлов в двойные кавычки, чтобы избежать проблем с пробелами и т.д. в именах файлов. Это не имеет особого значения, но эффективная практика является хорошей практикой:
if grep -q abc_def_APP <<< "$file"
if echo "$file" | grep -q abc_def_APP
Если я использую 'if echo $ file | grep -q abc_def_APP', он печатает содержимое файла $, которое я не хочу использовать – Jill448
Вы выбрали опцию '-q', чтобы make' grep' запускался в режиме «тихий» (за [POSIX] (http: // пабы) .opengroup.org/onlinepubs/9699919799/утилиты/grep.html)); он ничего не должен выводить. Если ваша версия 'grep' имеет другое представление о' -q', вам нужно будет просмотреть man-страницу вашего man 'grep' или перенаправить на'/dev/null'. –
Первый работал. 'if grep -q abc_def_APP <<< $ file' – Jill448
Yuck! Используйте соответствие строки оболочки
if [[ "$file" == *abc_def_APP* ]]; then ...
Не рискуете ли вы сопоставить несколько файлов с' * abc_def_APP *' и разрушить условие в процессе? Что, если '$ file'' 'abc_def_APP1' и' * abc_def_APP * 'расширена до 'abc_def_APP1 abc_def_APP2', условие будет оцениваться как false. – Anthony
и про "Yuck!" часть ; Я полностью с тобой согласен! вся unix (unix-like) командная оболочка отвратительна ... но вы не можете жить без нее, не так ли? – Anthony
Внутри двойных скобок мы сопоставляем шаблон с левой строкой, а не с именами файлов. –
Почему #! line say ksh? – jman
Какова ценность 'файла'? Я подозреваю, что у вас может быть проблема с RHS этого задания. – chepner