синтаксическая ошибка в awk

A )Создайте список разделов с помощьюlsblk -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT

B )Размонтируйте раздел с помощью umount /xyz -l, где /xyz — раздел, который нужно изменить. Если вы хотите переименовать загрузочный раздел, загрузитесь с LiveUSB. Процесс создания LiveUSB зависит от вашего дистрибутива, но вот процесс для Windows и Ubuntu .

C )Запустите gparted и выполните Choose: Partition, затем выберите /xyz и выберите Name Partition, который отобразит «Установить имя раздела» в диалоговом окне раздела /path -— -.

D )Введите имя, которое хотите использовать, затем примените изменение.

E )Перемонтируйте раздел с помощью /mount /newname -l.

0
06.05.2021, 19:08
3 ответа

Сделайте так, чтобы первая строка вызывала интерпретатор оболочки, а не awk, как в

#!/usr/bin/env bash
2
28.07.2021, 11:34

Здесь есть две проблемы. Во-первых, если вы хотите написать скрипт awk, вам нужно использовать -fв шебанге, поскольку для awkтребуется файл, и использование этого является обходным путем, позволяющим использовать awkдля содержимого скрипта.. См.man awk:

   -f progfile
             Specify  the pathname of the file progfile containing an awk
             program. A pathname of '-' shall denote the standard  input.
             If multiple instances of this option are specified, the con‐
             catenation of the files specified as progfile in  the  order
             specified  shall be the awk program. The awk program can al‐
             ternatively be specified in the command line as a single ar‐
             gument.

Итак, чтобы использовать awkв качестве переводчика в шебанге, вам нужно это:

#!/bin/awk -f

BEGIN{print "hello world!"}

У вас есть сценарий оболочки, который вызывает awk, поэтому вам нужен шебанг оболочки:

#!/bin/sh

awk 'BEGIN{ print "Hello world!"}'

Следующая проблема заключается в том, что в вашей переменной есть пробел, но вы используете переменную без кавычек. Всегда указывайте переменные в сценариях оболочки! Вы хотели вот этого:

userinput='Hello World!'
userinput="$userinput" awk '...

Вот рабочая версия вашего первого (скрипта оболочки ):

#!/bin/sh

userinput='Hello World!'
userinput="$userinput" awk '
    BEGIN {
        s = ENVIRON["userinput"] "\n"
        n = length(s)
        while (1)
            printf "%s", substr(s,int(1+rand()*n),1)
    }'

Обратите внимание, что ваш while (1)означает, что скрипт никогда не завершится, то есть бесконечный цикл.

А вот ваш второй скрипт как настоящий awkскрипт:

#!/usr/bin/awk -f

{
  s = $0 "\n"
  n = length(s)
  while (1)
    printf "%s", substr(s,int(1+rand()*n),1)
}
3
28.07.2021, 11:34

По умолчанию awk ожидает строку, содержащую программный код, в качестве первого аргумента в командной строке. Например.

awk 'BEGIN{ print "hello" }'

просто напечатает hello. Итак, если вы запустите

awk pass.awk

он пытается интерпретировать pass.awkкак код awk. Точка не является допустимым синтаксисом awk, поэтому вы получаете ошибку.

Чтобы awk прочитал код из файла, используйте awk -f foo.awk, как показано в ответе @terdon. (Вам нужно исправить строку hashbang и удалить заглушку оболочки, как показано здесь.)

0
28.07.2021, 11:34

Теги

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