Как продолжить следующую итерацию в bash [закрыто]

В конце концов я немного по-другому исправил это на элементарной ОС, но он должен применяться к другим операционным системам.

Устанавливать элементарные ОС в режиме UEFI как обычно. Перезагрузитесь, чтобы узнать, что вы получаете черный экран. Перезагрузите диск USB, который вы использовали для установки ОС. Когда появится grub и предложит вам попробовать «попробуйте элементарный», нажмите c и перейдите в командную строку grub. Используйте ls, чтобы попытаться определить, какой из доступных дисков и разделов - тот, который вы только что установили /root. Это может быть невозможно, если вы пошли с полным шифрованием диска, но я просто зашифровал свой /home. Как только вы это выясните, установите его в свой корень в grub. Для меня это выглядит так: set root=(hd1,2). Используйте элементарную конфигурацию grub для загрузки в вашу установку элементарной ОС: conffile /boot/grub/grub.cfg. Если этот файл не существует, вы, вероятно, выбрали неправильный диск / раздел на предыдущем шаге. Он должен загрузиться в элементарную ОС. На этом этапе вы можете вынуть USB-накопитель, и он должен работать нормально. (возможно, необязательно). Перейдите в корневую оболочку и создайте файл, упомянутый в другом ответе: sudo touch sudo touch /boot/bootx64.efi Обновить grub: sudo update-grub Перезагрузка в BIOS dell Переход к экрану последовательности загрузки Добавьте параметр, назовите его Ubuntu (или независимо). Нажмите на три точки, чтобы выбрать файл efi. Вы должны выбрать EFI\ubuntu\grubx.efi или что-то в этом роде. Другой ответ, если вы выбрали shimx64.efi, но я полагаю, что grub не обновит это. Перейдите в меню дополнительных параметров загрузки. Отключите опцию прежнего ПЗУ. По какой-то причине я должен это сделать или снова получить черный экран. Сохраните его, примените, перезапустите, выиграйте.

Он сохраняется. Я еще не обновил мое ядро, поэтому не могу сказать, что он будет работать вечно. Из-за этого теперь я ношу живой USB в любое время.

-1
задан 18 October 2017 в 07:33

4 ответа

Предполагая, что фрагмент кода является частью командной строки bash / командной строки. Цикл for имеет общий вид, такой как.

for arg in [list] do command(s)... done

Не имеет done части for петли.

syntax error: unexpected end of file

Дальнейшие имена переменных должны быть последовательными. file и filename, по-видимому, используются взаимозаменяемо. Целесообразно цитировать переменные, чтобы предотвратить размножение слов. Переменная $filename, используемая в третьей строке фрагмента кода, неинициализирована, т.е. пуста. Это приводит к выполнению head -3 '', давая результаты head: cannot open '' for reading: No such file or directory минимум 10k раз.

Также cat $filename | head -3 $filename избыточно добавляет к рабочей нагрузке, по-видимому, никакой цели.

Исправление всех этих проблем дает.

for file in *;do if [[ -f "$file" ]];then rid="$(head -3 "$file" | awk '{print $3}')" echo "$rid" else echo "$file" " not found" fi done

или как один вкладыш

for file in *;do if [[ -f "$file" ]];then rid="$(head -3 "$file" | awk '{print $3}')"; echo "$rid"; else echo "$file" " not found"; fi;done

Программа shellcheck весьма полезна для поиска этих ошибок, прежде чем запускать код. Shellcheck доступен в репозитории юниверсов.

Для дальнейшего ознакомления см. Advanced Bash-Scripting Guide от Mendel Cooper

1
ответ дан 18 July 2018 в 05:08

На ваш скрипт вы не grep с идентификатором, о котором вы говорите, или вы не проверяете его выход или нет! Вы просто печатаете третье значение третьей строки (если вы имеете в виду, что grep получает / печатает, если ID есть или нет).

Ниже awk команда проверяет получение / printing , если он выходит в каждом файле в третьей строке, затем напечатайте значение столбца 3 rd ; В противном случае, если этого не существует, напечатайте "Not Fouund" и прочитайте nextfile.

awk 'FNR==3&& !/ID/{print "Not Found"; nextfile} FNR==3 && /ID/{print $3}' file*

В man awk

nextfile Stop processing the current input file. The next input record read comes from the next input file. FILENAME and ARGIND are updated, FNR is reset to 1, and processing starts over with the first pattern in the AWK program. Upon reaching the end of the input data, gawk executes any END rule(s).
1
ответ дан 18 July 2018 в 05:08

Предполагая, что фрагмент кода является частью командной строки bash / командной строки. Цикл for имеет общий вид, такой как.

for arg in [list] do command(s)... done

Не имеет done части for петли.

syntax error: unexpected end of file

Дальнейшие имена переменных должны быть последовательными. file и filename, по-видимому, используются взаимозаменяемо. Целесообразно цитировать переменные, чтобы предотвратить размножение слов. Переменная $filename, используемая в третьей строке фрагмента кода, неинициализирована, т.е. пуста. Это приводит к выполнению head -3 '', давая результаты head: cannot open '' for reading: No such file or directory минимум 10k раз.

Также cat $filename | head -3 $filename избыточно добавляет к рабочей нагрузке, по-видимому, никакой цели.

Исправление всех этих проблем дает.

for file in *;do if [[ -f "$file" ]];then rid="$(head -3 "$file" | awk '{print $3}')" echo "$rid" else echo "$file" " not found" fi done

или как один лайнер

for file in *;do if [[ -f "$file" ]];then rid="$(head -3 "$file" | awk '{print $3}')"; echo "$rid"; else echo "$file" " not found"; fi;done

Программа shellcheck весьма полезна для поиска этих ошибок, прежде чем запускать код. Shellcheck доступен в репозитории юниверсов.

Для дальнейшего ознакомления см. Advanced Bash-Scripting Guide от Mendel Cooper

1
ответ дан 24 July 2018 в 18:15
  • 1
    Но моя проблема заключается в том, чтобы избавиться от «застрявшей проблемы». Почему это происходит? Даже после использования выше логики? – Anony 18 October 2017 в 08:15
  • 2
    Исправленные версии в конце моего ответа выполняются чисто в моей среде. Не могли бы вы предоставить анонимную часть вывода или ошибок при работе в вашей системе? – J. Starnes 18 October 2017 в 08:49

На ваш скрипт вы не grep с идентификатором, о котором вы говорите, или вы не проверяете его выход или нет! Вы просто печатаете третье значение третьей строки (если вы имеете в виду, что grep получает / печатает, если ID есть или нет).

Ниже awk команда проверяет получение / printing , если он выходит в каждом файле в третьей строке, затем напечатайте значение столбца 3 rd ; В противном случае, если этого не существует, напечатайте "Not Fouund" и прочитайте nextfile.

awk 'FNR==3&& !/ID/{print "Not Found"; nextfile} FNR==3 && /ID/{print $3}' file*

В man awk

nextfile Stop processing the current input file. The next input record read comes from the next input file. FILENAME and ARGIND are updated, FNR is reset to 1, and processing starts over with the first pattern in the AWK program. Upon reaching the end of the input data, gawk executes any END rule(s).
1
ответ дан 24 July 2018 в 18:15
  • 1
    Спасибо, но лучше ли использовать, если [-z RID]? И ваш скрипт, как он будет извлекать следующий файл? Является ли nextfile в скрипте переменной? – Anony 19 October 2017 в 07:16
  • 2
    Спасибо, но такая же функция может быть выполнена, если [-z]? – Anony 19 October 2017 в 07:39
  • 3
    @Anony Да, но на bash языке awk язык отличается от bash. И я не понял вас ", который является мощным" ! – αғsнιη 19 October 2017 в 07:47
  • 4
    потому что эта проверка на RID я делаю с использованием & quot; if & quot; и он работает, за меньшее количество файлов. Для файлов 10k и всего, его застревание. – Anony 19 October 2017 в 08:00
  • 5
    Дорогой @Anony Я прошу вас изменить ваш вопрос и удалить все опечатки и синтаксические проблемы, так как эта строка rid=cat $filename | head -3 $filename | awk '{print $3}' полностью является проблемой синтаксиса. даже я не знаю, как он работает для нескольких файлов! где вы делаете цикл с $file, а затем вы использовали $filename, и эта строка должна быть rid="$(cat "$file" | head -3 | awk '{print $3}')", если вы хотите, чтобы она работала (по крайней мере, эта строка), где есть лучшие способы улучшить это. Пока ваш вопрос еще не ясен, мы не можем понять, чтобы помочь вам:) – αғsнιη 19 October 2017 в 08:19

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

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