Что делает if [ -r "$1" ] ; значит?

Вместо использования шестнадцатеричного дампа я бы предложил использовать xxd, например:

xxd <bin_name>
00000000: cffa edfe 0700 0001 0300 0080 0200 0000 ................
00000010: 1000 0000 d006 0000 8580 2100 0000 0000 ..........!.....
00000020: 1900 0000 4800 0000 5f5f 5041 4745 5a45 ....H...__PAGEZE
00000030: 524f 0000 0000 0000 0000 0000 0000 0000  RO..............
00000040: 0000 0000 0100 0000 0000 0000 0000 0000 ................

Если вы хотите |вокруг букв ascii в конце, попробуйте это:

xxd <bin_name> |  sed -r 's/(................)$/|\1|/g'
00000000: cffa edfe 0700 0001 0300 0080 0200 0000  |................|
00000010: 1000 0000 d006 0000 8580 2100 0000 0000  |..........!.....|
00000020: 1900 0000 4800 0000 5f5f 5041 4745 5a45  |....H...__PAGEZE|
00000030: 524f 0000 0000 0000 0000 0000 0000 0000  |RO..............|
00000040: 0000 0000 0100 0000 0000 0000 0000 0000  |................|
0
08.01.2021, 04:26
2 ответа

-r спрашивает :есть ли у пользователя разрешение на чтение файла, указанного операндом $1?

Таблица множества операторов тестирования, связанных с файлом -, доступна по адресу :.https://tldp.org/LDP/abs/html/fto.html

Некоторые из них :-файл существует
-f файл является обычным файлом (не каталогом или файлом устройства)
-s файл имеет ненулевой размер
-d файл является каталогом
-b файл является блочным устройством
-файл c является символьным устройством
-файл p — это канал
-L-файл является символической ссылкой
-Файл S является сокетом
-t файл (дескриптор )связан с оконечным устройством
-r файл имеет разрешение на чтение (для пользователя, выполняющего тест)
-w файл имеет разрешение на запись (для пользователя, выполняющего тест)
-x файл имеет разрешение на выполнение (для пользователя, выполняющего тест)

2
18.03.2021, 22:37

Выполняет команду [с оператором -rи содержимым первого позиционного параметра (или пустой строкой, если позиционные параметры не установлены )в качестве операнда оператора -r(и замыкание ]для симметрии ).

Команда [встроена во все Bourne -, такие как оболочки (иfish). Поэтому его документацию обычно можно найти в соответствующем руководстве по оболочке. Он также известен как test.

В зависимости от вашей оболочки попробуйте:

  • info zsh test
  • info bash '['
  • fish -c 'help test'
  • или man ksh/ man dash... для тех оболочек, у которых нет информационной страницы.

(будьте осторожны, на некоторых системах необходимо установить пакет bash-docили zsh-doc, чтобы документация в формате infoбыла доступна для этих оболочек ).

Системы также обычно имеют автономную команду [или testс аналогичным интерфейсом, которую можно использовать из других типов оболочек или из вещей, которые не являются оболочками и не используют оболочку для запуска команд (например env, find -exec... ). Его документацию можно найти по адресу info testили man test(, возможно, также man '[').

В частности, оператор -rдолжен проверить, имеет ли процесс, выполняющий оболочку, разрешение на открытие данного файла для чтения . Если true, команда [возвращает статус выхода Success , и в этом случае оператор ifвыполняет часть then.

Это было бы эквивалентно access(argv[1], R_OK)в C.

5
18.03.2021, 22:37

Теги

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