Форматированный вывод. функция printf

Сравнение чисел

В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.

Возвращает истинное значение, если  равно . Возвращает истинное значение, если больше или равно .Возвращает истинное значение, если  больше .Возвращает истинное значение, если меньше или равно .Возвращает истинное значение, если n1 меньше .Возвращает истинное значение, если не равно .

В качестве примера опробуем один из операторов сравнения

Обратите внимание на то, что выражение заключено в квадратные скобки

Вот что выведет эта команда.

Сравнение чисел в скриптах

Значение переменной больше чем 5, в итоге выполняется ветвь оператора сравнения и в консоль выводится соответствующее сообщение.

Ответ 4

Еще несколько возможных решений:

Чтение из файла с разделителями

# ‘:’ является разделителем, и на каждой строке в файле имеются три поля

# IFS, установленный ниже, ограничен контекстом `read`, он не влияет на любой другой код

while IFS=: read -r field1 field2 field3; do

  # обработка полей

  # если строка содержит менее трех полей, то недостающие поля будут установлены в пустую строку

  # если строка имеет более трех полей, `field3` получит все значения, включая третье поле плюс разделитель(и)

done < input.txt

Чтение вывода другой команды с использованием подстановки процесса

while read -r line; do

  # обработка строки

done < <(command …)

Этот подход лучше, чем command … | while read -r line; do …потому, что цикл while здесь выполняется в текущей оболочке, а не в подоболочке.

Чтение из ввода с разделителями NULL, например,find … -print0

while read -r -d » line; do

  # использование второй строки ‘read … <<< «$line»‘, если нам нужно токенизировать строку

done < <(find /path/to/dir -print0)

Чтение из более чем одного файла за раз

while read -u 3 -r line1 && read -u 4 -r line2; do

  # обработка строк

  # обратите внимание, что цикл завершится, когда мы достигнем EOF в любом из файлов

done 3< input1.txt 4< input2.txt

Для совместимости с POSIX каждый вызов будет выглядеть примерно так read -r X <&3.

Чтение всего файла в массив (версии Bash до 4)

while read -r line; do

    my_array+=(«$line»)

done < my_file

Если файл заканчивается неполной строкой (в конце отсутствует новая строка), то:

while read -r line || ]; do

    my_array+=(«$line»)

done < my_file

Чтение всего файла в массив (версии Bash 4x и новее)

readarray -t my_array < my_file

или же

mapfile -t my_array < my_file

А потом

for line in «${my_array}»; do

  # обработка строк

done 

Команды для навигации по системе

Постоянно прописывать путь целиком сложно и долго. Поэтому в bash есть система обозначений специально для навигации:

  • . — текущая папка;
  • .. — папка на уровень выше текущей;
  • ~ — домашний каталог. Его адрес по умолчанию зависит от дистрибутива операционной системы. Например, в Ubuntu это /home/<имя_пользователя>;
  • — — предыдущий каталог.

Эти обозначения разрешается использовать вместо части пути или пути полностью. Например, можно написать ~/myfiles или ../docs/work.

Перемещаться по системе и ориентироваться в местоположении помогают команды:

  • pwd — показать полный путь к папке, где сейчас находится пользователь;
  • сd <путь> — перейти в другой каталог.

Так что я должен использовать?

Итак, теперь у нас есть 3 метода ввода данных от пользователя:

  • Аргументы командной строки
  • Чтение ввода во время выполнения скрипта
  • Принять данные, которые были перенаправлены в скрипт Bash через STDIN

Какой метод лучше всего зависит от ситуации.

Как правило, вы предпочитаете аргументы командной строки. Они наиболее удобны для пользователей, поскольку данные будут храниться в истории команд, чтобы они могли легко вернуться к нему. Это также лучший подход, если ваш скрипт может быть вызван другими скриптами или процессами (например, возможно, вы хотите, чтобы он периодически запускался с использованием CRON).

Иногда характер данных таков, что было бы не идеально для его хранения в истории команд людей и т. д. Хорошим примером этого являются учетные данные для входа (имя пользователя и пароль). В этих обстоятельствах лучше всего читать данные во время выполнения скрипта.

Если весь скрипт выполняет обработку данных определенным образом, то, вероятно, лучше всего работать с STDIN. Таким образом, его можно легко добавить в конвейер.

Иногда вы можете обнаружить, что комбинация идеальна. Пользователь может предоставить имя файла в качестве аргумента командной строки, а если нет, то скрипт обработает то, что он найдет в STDIN (когда мы посмотрим на операторы If, мы увидим, как это может быть достигнуто). Или, возможно, аргументы командной строки определяют определенное поведение, но чтение также используется для запроса дополнительной информации, если требуется.

Ультимативно вы должны думать о 3 факторах при принятии решения о том, как пользователи будут предоставлять данные вашему сценарию Bash:

  • Простота использования — какой из этих методов облегчит пользователям использование моего сценария?
  • Безопасность. Есть ли конфиденциальные данные, которые я должен обрабатывать надлежащим образом?
  • Надежность. Могу ли я сделать так, чтобы моя работа скриптов была интуитивно понятной и гибкой, а также усложнять ошибки?

Часть 2. Переменные в Bash

Часть 4. Сложение, вычитание, умножение, деление, модуль в Bash

Отображение информации о файловой системе

Чтобы получить информацию о файловой системе, в которой находится данный файл, вместо информации о самом файле, используйте параметр , ( ):

Результат команды будет выглядеть так:

Когда вызывается с параметром , он показывает следующую информацию:

  • Файл — имя файла.
  • ID — ID файловой системы в шестнадцатеричном формате.
  • Namelen — Максимальная длина имен файлов.
  • Основной размер блока — размер каждого блока в файловой системе.
  • Блоки:
    • Всего — общее количество блоков в файловой системе.
    • Свободно — количество свободных блоков в файловой системе.
    • Доступно — количество бесплатных блоков, доступных пользователям без полномочий root.
  • Inodes:
    • Всего — общее количество индексных дескрипторов в файловой системе.
    • Free — количество свободных индексных дескрипторов в файловой системе.

Remarks

Функция получает сведения о файле или каталоге, указанном параметром , и сохраняет их в структуре, указанной в параметре . Функция автоматически требуемым образом обрабатывает аргументы в виде многобайтовых строк, распознавая многобайтовые последовательности символов в соответствии с текущей многобайтовой кодовой страницей.

— это версия с расширенными символами; аргумент для — строка расширенных символов. В остальных отношениях поведение функций и идентично, за исключением того, что функция does not hиle multibyte-character strings.

Варианты этих функций поддерживают 32- или 64-разрядные типы времени и 32- или 64-разрядные значения длины файлов. Первый числовой суффикс (32 или 64) указывает размер используемого типа времени; Вторым суффиксом является либо I32 , либо I64, указывающий, представлен ли размер файла как 32-разрядное или 64-разрядное целое число.

эквивалентно значению и содержит 64-разрядное время. Это справедливо, если не определено, в этом случае действует старое поведение; использует 32-разрядное время и содержит 32-бит времени. Это же справедливо и для .

Примечание

не работает с символами символьных ссылок Windows Vista. В таких случаях функция всегда возвращает размер файла, равный 0. Функция правильно работает с символьными ссылками.

Эта функция проверяет свои параметры. Если параметр или имеет значение , вызывается обработчик недопустимого параметра, как описано в .

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Типы времени и разновидности типов файлов

Функции Определена ли директива _USE_32BIT_TIME_T? Тип времени Тип длины файла
, Не определено 64-разрядная 32-разрядная версия
, Определено 32-битная 32-битная
, Не затрагивается определением макроса 32-битная 32-битная
, Не затрагивается определением макроса 64-разрядная система 64-разрядная система
, Не определено 64-разрядная система 64-разрядная система
, Определено 32-разрядная версия 64-разрядная версия
, Не затрагивается определением макроса 32-разрядная версия 64-разрядная версия
, Не затрагивается определением макроса 64-разрядная 32-разрядная версия

Универсальное текстовое сопоставление функций

ассемблер & не определено определяется определяется

Структура, определенная в , включает следующие поля.

Поле Описание
Числовой идентификатор группы, которой принадлежит файл (только для UNIX). В системах Windows это поле всегда равно нулю. Перенаправленный файл классифицируется как файл Windows.
Время последнего доступа к файлу. Действительно на дисках, отформатированных в файловой системе NTFS, но не в FAT.
Время создания файла. Действительно на дисках, отформатированных в файловой системе NTFS, но не в FAT.
Номер диска, содержащего файл (то же, что и ).
Номер узла информации ( ) для файла (только для UNIX). В файловых системах UNIX параметр описывает отметки даты и времени файла, разрешения и содержимое. Если файлы связаны жесткими ссылками друг с другом, они имеют один и тот же параметр . Параметр и, следовательно, параметр не имеют смысла в файловых системах FAT, HPFS и NTFS.
Битовая маска для информации о файловом режиме. Бит устанавливается, если параметр задает каталог; бит устанавливается, если параметр задает обычный файл или устройство. Пользовательские биты чтения/записи устанавливаются в соответствии с режимом разрешений файла; пользовательские биты выполнения устанавливаются согласно расширению имени файла.
Время последнего изменения файла.
Всегда имеет значение 1 в файловых системах, отличных от NTFS.
Номер диска, содержащего файл (то же, что и ).
Размер файла в байтах; 64-разрядное целое число для вариантов с суффиксом.
Числовой идентификатор пользователя, который владеет файлом (только для UNIX). В системах Windows это поле всегда будет равно нулю. Перенаправленный файл классифицируется как файл Windows.

Если параметр ссылается на устройство, поле , различные поля времени, поля и в структуре не имеют смысла. Поскольку использует тип, определенный в , необходимо включить перед в коде.

ERRORS top

       EACCES Search permission is denied for one of the directories in
              the path prefix of pathname.  (See also
              path_resolution(7).)

       EBADF  fd is not a valid open file descriptor.

       EBADF  (fstatat()) pathname is relative but dirfd is neither
              AT_FDCWD nor a valid file descriptor.

       EFAULT Bad address.

       EINVAL (fstatat()) Invalid flag specified in flags.

       ELOOP  Too many symbolic links encountered while traversing the
              path.

       ENAMETOOLONG
              pathname is too long.

       ENOENT A component of pathname does not exist or is a dangling
              symbolic link.

       ENOENT pathname is an empty string and AT_EMPTY_PATH was not
              specified in flags.

       ENOMEM Out of memory (i.e., kernel memory).

       ENOTDIR
              A component of the path prefix of pathname is not a
              directory.

       ENOTDIR
              (fstatat()) pathname is relative and dirfd is a file
              descriptor referring to a file other than a directory.

       EOVERFLOW
              pathname or fd refers to a file whose size, inode number,
              or number of blocks cannot be represented in,
              respectively, the types off_t, ino_t, or blkcnt_t.  This
              error can occur when, for example, an application compiled
              on a 32-bit platform without -D_FILE_OFFSET_BITS=64 calls
              stat() on a file whose size exceeds (1<<31)-1 bytes.

Let

let это встроенная функция bash, которая позволяет производить базовые арифметические операции.

Используется следующим образом:

Рассмотрим примеры в скрипте

let_example.sh

Разберём команды по очереди:

Строка 4 — Это простейшая форма записи без кавычек.

Помните, что если вычисление идёт без кавычек — ставить пробелы нельзя

Строка 7 — Если поставить кавычки — можно пользоваться пробелом для лучшей читаемости.\

Строка 10 — Увеличиваем значение на 1. Это аналог «a = a &plus; 1».

Строка 16 — В выражение можно включить и другие переменные.

./let_example.sh 11

99102041

Таблица основных операторов

Оператор Операция
&plus;, -, \*, / Сложение, вычитание, умножение, деление
var&plus;&plus; Увеличение переменной на 1
var— Уменьшение переменной на 1
% Модуль: возвращает остаток от деления

Как использовать Bash-скрипты

Я каждый день пользуюсь терминалом, чтобы выполнять свои задачи. Когда я пишу руководства по языкам программирования, мне постоянно приходится делать повторяющиеся действия:

  1. Очистить консоль, чтобы сделать скриншот без лишней информации.
  2. Скомпилировать код.
  3. Запустить программу.
  4. Повторить.

Кажется, что на это уходит не так уж и много времени, но за день всё это скапливается в несколько десятков минут, которые можно потратить на что-то более полезное.

Чтобы не повторять одно и то же каждый раз, я пишу скрипт, который будет делать всё это за меня. Для этого нужно создать файл с расширением .sh и написать команды в нём:

Затем мы помещаем этот файл в папку с исходным кодом и разрешаем запускать его. Сделать это можно в свойствах файла:

Но этот вариант не очень удобный, потому что требует открытия файлового менеджера, поиска файла, открытия свойств скрипта и других действий. Всё это легче и гораздо быстрее сделать через терминал с помощью следующей команды:

Затем остаётся только запустить скрипт:

Чтобы сделать скрипт ещё полезнее, можно использовать переменные (начинаются с $):

Теперь передадим этому скрипту название файла, который нужно скомпилировать и запустить:

Этот скрипт стал универсальным, и его достаточно просто скопировать в папки, где он вам нужен. Либо добавить его в PATH — переменную, в которой хранятся данные о категориях с исполнительными файлами. Добавив путь к папке со скриптом в PATH, вы сможете вызывать его из любого места. Для этого откройте файл ~/.bashrc и добавьте в конце следующую команду:

А потом запустите команду, которая активирует изменения:

Теперь, когда нужно скомпилировать и выполнить программу, достаточно всего лишь запустить написанный скрипт.

Команды для просмотра информации

В ходе работы бывает нужно просмотреть файл или мануал, проверить содержимое каталога. У bash для этого множество возможностей, но мы пока рассмотрим основные:

  • man <command> — открыть мануал, руководство пользователя по какой-либо команде. Этот справочник очень полезен на начальных этапах изучения оболочки. Там приведены подробные описания команд, но на русский язык руководство не переведено;
  • cat <файл> — показать содержимое файла прямо в терминале. Можно передать команде несколько файлов, тогда она выведет содержимое каждого;
  • ls <путь к папке> — отобразить содержимое каталога. Если не передать этой команде путь, она покажет, что находится в текущей папке.

Отображение содержимого каталога

Less. Команда less <файл> открывает переданный файл для чтения в специальном интерфейсе. Она хорошо подходит для просмотра длинных файлов, потому что внутри интерфейса less можно ориентироваться по содержимому:

  • нажатие g переводит пользователя в начало файла;
  • нажатие G переносит в конец;
  • / открывает поиск по содержимому;
  • q выходит из less.

Язык bash зависит от раскладки: если ввести g, когда включен русский язык, команда не сработает.

Nano. Так называется текстовый редактор, которым можно пользоваться из консоли. Он очень простой: это аналог Notepad, который открывается прямо внутри командной строки. Чтобы открыть в нем файл, нужно ввести команду nano <файл>. Внутри программы можно читать, редактировать, сохранять содержимое. Основные команды редактора указаны внутри его интерфейса.

Текстовый редактор nano

Для перехода в nano без открытия файла команду можно запустить без аргументов

Инициализация цикла списком, полученным из результатов работы команды

Ещё один способ инициализации цикла заключается в передаче ему списка, который является результатом работы некоей команды. Тут используется подстановка команд для их исполнения и получения результатов их работы.

В этом примере задействована команда , которая читает содержимое файла. Полученный список значений передаётся в цикл и выводится на экран

Обратите внимание на то, что в файле, к которому мы обращаемся, содержится список слов, разделённых знаками перевода строки, пробелы при этом не используются

Тут надо учесть, что подобный подход, если ожидается построчная обработка данных, не сработает для файла более сложной структуры, в строках которого может содержаться по несколько слов, разделённых пробелами. Цикл будет обрабатывать отдельные слова, а не строки.

Что, если это совсем не то, что нужно?

Проверки файлов

Пожалуй, нижеприведённые команды используются в bash-скриптах чаще всего. Они позволяют проверять различные условия, касающиеся файлов. Вот список этих команд.

Проверяет, существует ли файл, и является ли он директорией.Проверяет, существует ли файл. Проверяет, существует ли файл, и является ли он файлом.Проверяет, существует ли файл, и доступен ли он для чтения.роверяет, существует ли файл, и не является ли он пустым.Проверяет, существует ли файл, и доступен ли он для записи.Проверяет, существует ли файл, и является ли он исполняемым. Проверяет, новее ли , чем .Проверяет, старше ли , чем . Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.

Эти команды, как впрочем, и многие другие рассмотренные сегодня, несложно запомнить. Их имена, являясь сокращениями от различных слов, прямо указывают на выполняемые ими проверки.

Опробуем одну из команд на практике:

Этот скрипт, для существующей директории, выведет её содержимое.

Вывод содержимого директории

Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.

Модификаторы минимальной ширины поля

Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то чтобы ширина поля вывода была не меньше указанной минимальной длины, при необходимости вывод будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05d означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы число состояло из пяти цифр. В следующей программе показано, как применяется модификатор минимальной ширины поля:

#include <stdio.h>

int main(void)
{
  double item;

  item = 10.12304;

  printf("%f\n", item);
  printf("%10f\n", item);
  printf("%012f\n", item);

  return 0;
}

Вот что выводится при выполнении этой программы:

10.123040
 10.123040
00010.123040

Модификатор минимальной ширины поля чаще всего используется при создании таблиц, в которых столбцы должны быть выровнены по вертикали. Например, следующая программа выводит таблицу квадратов и кубов чисел от 1 до 19:

#include <stdio.h>

int main(void)
{
  int i;

  /* вывод таблицы квадратов и кубов */
  for(i=1; i<20; i++)
    printf("%8d %8d %8d\n", i, i*i, i*i*i);

  return 0;
}
 1       1       1
 2       4       8
 3       9      27
 4      16      64
 5      25     125
 6      36     216
 7      49     343
 8      64     512
 9      81     729
10     100    1000
11     121    1331
12     144    1728
13     169    2197
14     196    2744
15     225    3375
16     256    4096
17     289    4913
18     324    5832
19     361    6859

Основные правила условий

Когда вы начинаете писать и использовать свои собственные условия, вы должны знать некоторые правила, чтобы избежать ошибок, которые трудно отследить. Вот три важных:

  1. Всегда оставляйте пробелы между скобками и фактической проверкой/сравнением. Следующие не будут работать:

    if ; then

    Баш будет жаловаться на “отсутствуoщий ‘]’”.

  2. Всегда заканчивайте строку перед введением нового ключевого слова, такого как «then». Слова if, then, else, elif и fi являются ключевыми словами оболочки, что означает, что они не могут использовать одну и ту же строку. Поместите «;» между предыдущим оператором и ключевым словом или поместите ключевое слово в начале новой строки. Bash будет выдавать ошибки, такие как «ошибка синтаксиса, рядом с неожиданным токеном «fi», если вы этого не сделаете.

  3. Это хорошая привычка заключать в кавычки строковые переменные, если вы используете их в условиях, потому что в противном случае они могут создать проблемы, если они содержат пробелы и/или символы новой строки. Цитируя я имею в виду:

    if ; then

    Есть несколько случаев, в которых вы не должны экранировать ковычками, но они редки. Вы увидите одну из них далее в руководстве.

Кроме того, есть две вещи, которые может быть полезно знать:

  1. Вы можете инвертировать условие, поставив перед ним «!». Пример:

    if ; then

    Обязательно поместите «!» В скобки!

  2. Вы можете комбинировать условия с помощью определенных операторов. Для синтаксиса с одной скобкой, который мы использовали до сих пор, вы можете использовать «-a» для and и «-o» для or. Пример:

    if ; then

    Приведенное выше условие вернет true, если $foo содержит целое число, большее или равное 3 и меньшее (Less Than) 10. Подробнее об этих выражениях объединения можно прочитать в соответствующих синтаксисах условий.

Во всяком случае, я пока показал вам только условия в одинарных скобках. Однако есть и другие синтаксисы, о которых вы узнаете в следующем разделе.

Errors

EACCES

Search permission is denied for one of the directories in the path prefix of path. (See also path_resolution(7).)

EBADF

fd is bad.

EFAULT

Bad address.

ELOOP

Too many symbolic links encountered while traversing the path.

ENAMETOOLONG

path is too long.

ENOENT

A component of path does not exist, or path is an empty string.

ENOMEM

Out of memory (i.e., kernel memory).

ENOTDIR

A component of the path prefix of path is not a directory.

EOVERFLOW

path or fd refers to a file whose size, inode number, or number of blocks cannot be represented in, respectively, the types off_t,
ino_t, or blkcnt_t. This error can occur when, for example, an application compiled on a 32-bit platform without -D_FILE_OFFSET_BITS=64
calls stat() on a file whose size exceeds (1<<31)-1 bytes.

Что такое процесс?

Чтобы понять что отображает команда ps сначала надо разобратся что такое процесс. Процесс Linux — это экземпляр программы, запущенный в памяти. Все процессы можно разделить на обычные и фоновые. Более подробно об этом написано в статье управление процессами Linux. Linux — это многопользовательская система, каждый пользователь может запускать одни и те же программы, и даже один пользователь может захотеть запустить несколько экземпляров одной программы, поэтому ядру нужно как-то идентифицировать такие однотипные процессы. Для этого каждому процессу присваивается PID (Proccess Identificator).

Каждый из процессов может находиться в одном из таких состояний:

  • Запуск — процесс либо уже работает, либо готов к работе и ждет, когда ему будет дано процессорное время;
  • Ожидание — процессы в этом состоянии ожидают какого-либо события или освобождения системного ресурса. Ядро делит такие процессы на два типа — те, которые ожидают освобождения аппаратных средств и приостановление с помощью сигнала;
  • Остановлено — обычно, в этом состоянии находятся процессы, которые были остановлены с помощью сигнала;
  • Зомби — это мертвые процессы, они были остановлены и больше не выполняются, но для них есть запись в таблице процессов, возможно, из-за того, что у процесса остались дочерние процессы.

А теперь давайте перейдем ближе к практике.

Табличный вывод

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:

12345678

#include <stdio.h>int main(){  float x = 1.2345;  printf(«x=%10.5f\n», x);  getchar();  return 0;}

В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

Вывод чисел

Числа в десятичном формате со знаком отображаются с помощью спецификатора преобразования %d или %i. Эти спецификаторы преобразования эквивалентны; оба поддерживаются в силу сложившихся привычек программистов, например, из-за желания поддерживать те же спецификаторы, которые применяются в функции scanf().

Для вывода целого значения без знака используйте %u.

Спецификатор преобразования %f дает возможность выводить числа в формате с плавающей точкой. Соответствующий аргумент должен иметь тип double.

Спецификаторы преобразования %e и %E в функции printf() позволяют отображать аргумент типа double в экспоненциальном формате. В общем виде числа в таком формате выглядят следующим образом:

x.dddddE+/-yy

Чтобы отобразить букву E в верхнем регистре, используйте спецификатор преобразования %E; в противном случае используйте спецификатор преобразования %e.

Спецификатор преобразования %g или %G указывает, что функции printf() необходимо выбрать один из спецификаторов: %f или %e. В результате printf() выберет тот спецификатор преобразования, который позволяет сделать самый короткий вывод. Если нужно, чтобы при выборе экспоненциального формата буква E отображалась на верхнем регистре, используйте спецификатор преобразования %G; в противном случае используйте спецификатор преобразования %g.

Применение спецификатора преобразования %g показано в следующей программе:

#include <stdio.h>

int main(void)
{
  double f;

  for(f=1.0; f<1.0e+10; f=f*10)
    printf("%g ", f);

  return 0;
}

В результате выполнения получится следующее:

1  10  100  1000  10000  100000  1e+06  1e+07  1e+08  1e+09

Целые числа без знака можно выводить в восьмеричном или шестнадцатеричном формате, используя спецификатор преобразования %o или %x. Так как в шестнадцатеричной системе для представления чисел от 10 до 15 используются буквы от А до F, то эти буквы можно выводить на верхнем или на нижнем регистре. Как показано ниже, в первом случае используется спецификатор преобразования %X, а во втором — спецификатор преобразования %x:

#include <stdio.h>

int main(void)
{
  unsigned num;

  for(num=0; num < 16; num++) {
    printf("%o ", num);
    printf("%x ", num);
    printf("%X\n", num);
  }

  return 0;
}

Вот что вывела эта программа:

0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
10 8 8
11 9 9
12 a A
13 b B
14 c C
15 d D
16 e E
17 f F

Настройка вывода

У команды есть две опции, которые позволяют вам настроить вывод в соответствии с вашими потребностями: , ( ) и .

Разница между этими двумя параметрами заключается в том, что, когда два или более файла используются в качестве оперантов, автоматически добавляет новую строку после каждого вывода операнда. интерпретирует экранирование обратной косой черты.

Существует множество директив форматирования для файлов и файловых систем, которые можно использовать с и .

Например, чтобы просмотреть только тип файла, вы должны запустить:

Вы можете комбинировать любое количество директив форматирования и, при желании, использовать между ними настраиваемые разделители. Разделитель может быть одиночным символом или строкой:

Чтобы интерпретировать специальные символы, такие как или табуляция, используйте параметр :

печатает новую строку:

также может отображать информацию в краткой форме. Этот формат полезен для анализа другими утилитами.

Вызовите команду с параметром ( ), чтобы распечатать вывод в краткой форме:

Для получения полного списка всех директив форматирования для файлов и типов файловых систем используйте или в вашем терминале.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: