Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями

Содержание:

Ныряем в код

Разберем код по блокам.

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

Блок 2

Обнуляем регистр EDX, значение которого (NULL) будет использоваться для , а также как символ конца строки для вносимых в стек строк. Обнуляем регистр через XOR, так как инструкция привела бы к появлению null-байтов в shell-коде, что недопустимо.

Важно!

Аргументы для мы отправляем в стек, предварительно перевернув их справа налево, так как стек растет от старших адресов к младшим, а данные из него извлекаются наоборот — от младших адресов к старшим.

Для того чтобы перевернуть строку и перевести ее в hex, можно воспользоваться следующей Linux-командой:

Блок 3

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

Блок 4

Блок 5

Почему в AL, а не в EAX? Регистр EAX имеет разрядность 32 бита. К его младшим 16 битам можно обратиться через регистр AX. AX, в свою очередь, можно разделить на две части: младший байт (AL) и старший байт (AH). Отправляя значение в AL, мы избегаем появления нулевых байтов, которые бы автоматически появились при добавлении 11 в EAX.

Можно ли сделать наш код существенно компактнее?

Можно. Убрав блок, описывающий номер порта. При таком раскладе все равно будет исправно слушать сеть и даст нам шелл. Правда, номер порта нам теперь придется найти с помощью . Наш новый код будет выглядеть следующим образом:

Компилируем:

Линкуем:

Извлекаем shell-код:

Проверяем:

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

И снова проверяем bind shell

Bingo! Цель достигнута: мы написали один из самых компактных Linux x86 bind shellcode. Как видишь, ничего сложного ;).

How can I find out what shell I am using?

The following echo command or printf command should work: OR Please note that $SHELL is the shell for the current user but not necessarily the shell that is running at the moment. Try the following examples

bash 
echo "My current shell is $SHELL ($0)"
ksh   ## start a new shell ##
echo "My current shell is $SHELL ($0)"
echo $SHELL

How do I check which shell am I using?

Here is another old good Unix trick. Use the ps command with -p {pid} option. The following command selects the processes whose process ID numbers appear in pid. Use the following command to find out which shell you are in: Sample outputs:

  PID TTY          TIME CMD
 5217 ?        00:00:00 bash

So what is a $ argument passed to the -p option? Remember $ returns the PID (process identification number) of the current process, and the current process is your shell. So running a ps on that number displays a process status listing of your shell. In that listing, you will find the name of your shell (look for CMD column). Sample outputs:

  PID TTY          TIME CMD
6453 pts/0    00:00:00 csh

From my Linux box: Sample outputs:

  PID TTY          TIME CMD
5866 pts/0    00:00:00 bash

You can store your shell name in a variable as follows : Please note those are backquotes, not apostrophes. Or better try out the following if you have a bash shell: Another option is as follows: OR Sample outputs from the above commands:
Fig.01: Linux check which shell am I using

(( и [[

Команда предоставляет широчайшие возможности, но является несколько неудобной в использовании из-за необходимости делать переходы в коде с помощью \ и из-за различиях в сравнениях строк и чисел. К счастью, bash располагает двумя другими способами тестирования, которые покажутся более естественными для тех, кто знаком с синтаксисом C, C++ или Java.

Составная команда оценивает арифметическое выражение и устанавливает статус выдачи равный 1, если выражение равно 0, или статус выдачи равный 0, если выражение имеет ненулевое значение. Вам ненужно ставить \ перед операторами между и . Арифметика работает с целыми числами. Деление на 0 вызывает ошибку, но переполнение этого не делает. Вы выполняете обычные для языка C арифметические, логические и побитовые операции. Команда также может запускать одно или несколько арифметических выражениий. Она обычно используется для того, чтобы приписывать значения арифметическим переменным.

Листинг 5. Присваивание и тестирование арифметических выражений
$ let x=2 y=2**3 z=y*3;echo $? $x $y $z
0 2 8 24
$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
0 3 8 16
$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
0 4 8 13

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

Листинг 6. Использование составного оператора [[
$ ] &&  
>  echo "home is a writable directory"
home is a writable directory

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

Листинг 7. Тесты с [[ и групповым символом
$ *\ ?d* ]]; echo $?
0
$ *\ ?d* ]]; echo $?
1
$ *\ ?d* ]]; echo $?
1

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

Листинг 8 дает некоторые примеры этого.

Листинг 8. Осуществление арифметических тестов с помощью [[
$ *\ ?d* || (( 3 > 2 )) ]]; echo $?
0
$ *\ ?d* || 3 -gt 2 ]]; echo $?
0
$ *\ ?d* || 3 > 2 ]]; echo $?
0
$ *\ ?d* || a > 2 ]]; echo $?
0
$ *\ ?d* || a -gt 2 ]]; echo $?
-bash: a: unbound variable

Устранение неполадок при открытии файлов SH3D

Общие проблемы с открытием файлов SH3D

Sweet Home 3D не установлен

Дважды щелкнув по файлу SH3D вы можете увидеть системное диалоговое окно, в котором сообщается «Не удается открыть этот тип файла». В этом случае обычно это связано с тем, что на вашем компьютере не установлено Sweet Home 3D для %%os%%. Так как ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его дважды щелкнув на него.

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

Установлена неправильная версия Sweet Home 3D

В некоторых случаях у вас может быть более новая (или более старая) версия файла Sweet Home 3D Design File, не поддерживаемая установленной версией приложения. При отсутствии правильной версии ПО Sweet Home 3D (или любой из других программ, перечисленных выше), может потребоваться загрузить другую версию ПО или одного из других прикладных программных средств, перечисленных выше. Такая проблема чаще всего возникает при работе в более старой версии прикладного программного средства с файлом, созданным в более новой версии, который старая версия не может распознать.

Совет: Иногда вы можете получить общее представление о версии файла SH3D, щелкнув правой кнопкой мыши на файл, а затем выбрав «Свойства» (Windows) или «Получить информацию» (Mac OSX).

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

Даже если на вашем компьютере уже установлено Sweet Home 3D или другое программное обеспечение, связанное с SH3D, вы все равно можете столкнуться с проблемами во время открытия файлов Sweet Home 3D Design File. Если проблемы открытия файлов SH3D до сих пор не устранены, возможно, причина кроется в других проблемах, не позволяющих открыть эти файлы. Такие проблемы включают (представлены в порядке от наиболее до наименее распространенных):

sh/bash/csh/Tcsh/ksh/pdksh等shell的区别

  • sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。
    Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。
  • bash(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bourne Shell 的扩展。
    与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。
  • csh(全称 C Shell): 是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
  • Tcsh: 是 Linux 提供的 C Shell 的一个扩展版本。
    Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
  • ksh (全称 Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
  • pdksh: 是 Linux 系统提供的 ksh 的扩展。
    pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。

Немного теории

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

Системные вызовы

Системные вызовы обеспечивают связь между пространством пользователя (user mode) и пространством ядра (kernel mode) и используются для множества задач, таких, например, как запуск файлов, операции ввода-вывода, чтения и записи файлов.

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

Регистры

Регистры — специальные ячейки памяти в процессоре, доступ к которым осуществляется по именам (в отличие от основной памяти). Используются для хранения данных и адресов. Нас будут интересовать регистры общего назначения: EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP.

Стек

Стеком называется область памяти программы для временного хранения произвольных данных

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

Проблема нулевого байта

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

Таким образом, если нулевой байт встретится в shell-коде, то все последующие за ним байты проигнорируются и код не сработает, что нужно учитывать.

Типы файлов SH

Ассоциация основного файла SH

.SH

Формат файла: .sh
Тип файла: Bash Shell Script

Bash Shell Script скрипт, запрограммированный для Баша, типа Unix оболочки. Он широко используется во многих дистрибутивах Linux и OS X.

Создатель: Unknown Developer
Категория файла: Файлы разработчика
Ключ реестра: HKEY_CLASSES_ROOT\.sh

Программные обеспечения, открывающие Bash Shell Script:

Notepad++, разработчик — Don Ho

Совместимый с:

Windows
Mac
Linux

Vim, разработчик — Bram Moolenaar

Совместимый с:

Windows
Mac
Linux
Unix
OS X El Capitan

gVim, разработчик — Open Source

Совместимый с:

Windows

GNU Bash, разработчик — GNU Operating System

Совместимый с:

Windows
Mac
Linux

Cygwin, разработчик — Open Source

Совместимый с:

Windows

Apple Terminal, разработчик — Apple

Совместимый с:

Mac

iTerm, разработчик — Open Source

Совместимый с:

Mac

Ассоциации других файлов SH

.SH

Формат файла: .sh
Тип файла: Unix Shell Archive File

SH расширение файла в основном самораспаковывающийся архив, связанный с приложением ШАР Unix. Она состоит из команд в сценарии оболочки о том, как пользователь может извлечь содержимое. Файл в основном встречаются в системах Unix, которые содержат Bourne оболочки.

Создатель: Open Source
Категория файла: Сжатые файлы

Программы, открывающие файлы Unix Shell Archive File :

unshar, разработчик — Open Source

Совместимый с:

Linux
Unix

ZipZag, разработчик — Open Source

Совместимый с:

Windows
DOS

Variable Types

When a shell is running, three main types of variables are present −

  • Local Variables − A local variable is a variable that is present within the current instance of the shell. It is not available to programs that are started by the shell. They are set at the command prompt.

  • Environment Variables − An environment variable is available to any child process of the shell. Some programs need environment variables in order to function correctly. Usually, a shell script defines only those environment variables that are needed by the programs that it runs.

  • Shell Variables − A shell variable is a special variable that is set by the shell and is required by the shell in order to function correctly. Some of these variables are environment variables whereas others are local variables.

Previous Page
Print Page

Next Page  

Преимущества командной строки

Может возникнуть вопрос: зачем возиться с командной строкой, если существуют удобные и красивые графические интерфейсы? Тому есть множество причин. Во-первых, далеко не все операции удобнее и быстрее выполнять с помощью графического интерфейса. Во-вторых, каждая программа следует основополагающему принципу Unix-систем: делать чётко определённую работу и делать её хорошо. Иными словами, вы всегда понимаете, что происходит при запуске той или иной утилиты (если что-то не вполне понятно, то следует обратиться к man-руководству). В-третьих, осваивая команды, пробуя их сочетания и комбинации их параметров, пользователь изучает систему, приобретая ценный практический опыт. Вы получаете доступ к таким эффективным инструментам, как конвейеры, позволяющие организовать цепочку команд для обработки данных, средства перенаправления ввода/вывода, а кроме того, можете программировать непосредственно в командной оболочке. Пожалуй, на программировании стоит остановиться подробнее, тем более что многие системные сценарии в Linux (например, скрипты запуска системных сервисов) написаны для shell.

Описываем системные вызовы через ассемблер

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

Аргументы функции должны быть помещены в регистры EBX, ECX, EDX:

  • EBX — должен содержать адрес строки с filename — ;
  • ECX — должен содержать адрес строки с — ;
  • EDX — должен содержать null-байт для .

Регистры ESI и EDI мы использовали как временное хранилище для сохранения аргументов в нужной последовательности в стек, чтобы в блоке 5 (см. код выше) перенести в регистр ECX указатель (указатель указателя, если быть более точным) на массив .

Shell Scripts

The basic concept of a shell script is a list of commands, which are listed in the order of execution. A good shell script will have comments, preceded by # sign, describing the steps.

There are conditional tests, such as value A is greater than value B, loops allowing us to go through massive amounts of data, files to read and store data, and variables to read and store data, and the script may include functions.

We are going to write many scripts in the next sections. It would be a simple text file in which we would put all our commands and several other required constructs that tell the shell environment what to do and when to do it.

Shell scripts and functions are both interpreted. This means they are not compiled.

How to check which shell am I using:

Use the following Linux or Unix commands:

  1. ps -p $$ – Display your current shell name reliably.
  2. echo "$SHELL" – Display the shell for the current user but not necessarily the shell that is running at the movement.
  3. echo $0 – Another reliable and simple method to get the current shell interpreter name on Linux or Unix-like systems.
  4. cat /etc/shells – List pathnames of valid login shells currently installed
  5. grep "^$USER" /etc/passwd – Print the default shell name. The default shell runs when you open a terminal window.
  6. chsh -s /bin/ksh – Change the shell used from /bin/bash (default) to /bin/ksh for your account

Устранение неполадок при открытии файлов SH4

Общие проблемы с открытием файлов SH4

Binary Data не установлен

Дважды щелкнув по файлу SH4 вы можете увидеть системное диалоговое окно, в котором сообщается «Не удается открыть этот тип файла». В этом случае обычно это связано с тем, что на вашем компьютере не установлено Binary Data для %%os%%. Так как ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его дважды щелкнув на него.

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

Установлена неправильная версия Binary Data

В некоторых случаях у вас может быть более новая (или более старая) версия файла Binary Data, не поддерживаемая установленной версией приложения. При отсутствии правильной версии ПО Binary Data (или любой из других программ, перечисленных выше), может потребоваться загрузить другую версию ПО или одного из других прикладных программных средств, перечисленных выше. Такая проблема чаще всего возникает при работе в более старой версии прикладного программного средства с файлом, созданным в более новой версии, который старая версия не может распознать.

Совет: Иногда вы можете получить общее представление о версии файла SH4, щелкнув правой кнопкой мыши на файл, а затем выбрав «Свойства» (Windows) или «Получить информацию» (Mac OSX).

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

Даже если на вашем компьютере уже установлено Binary Data или другое программное обеспечение, связанное с SH4, вы все равно можете столкнуться с проблемами во время открытия файлов Binary Data. Если проблемы открытия файлов SH4 до сих пор не устранены, возможно, причина кроется в других проблемах, не позволяющих открыть эти файлы. Такие проблемы включают (представлены в порядке от наиболее до наименее распространенных):

Запуск скрипта sh в Linux

Сначала рассмотрим пример небольшого sh скрипта:

Вторая строка — это действие, которое выполняет скрипт, но нас больше всего интересует первая — это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:

Мы разрешаем выполнять запуск sh linux всем категориям пользователей — владельцу, группе файла и остальным. Следующий важный момент — это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:

Или полный путь от корня:

Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ — /usr/local/bin.

Теперь вы можете выполнить:

Это был первый способ вызвать скрипт, но есть еще один — мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:

А если нам нужно запустить скрипт на php, то выполните:

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

script.sh &

Даже запустить процесс linux не так сложно.

Shell Types

In Unix, there are two major types of shells −

  • Bourne shell − If you are using a Bourne-type shell, the $ character is the default prompt.

  • C shell − If you are using a C-type shell, the % character is the default prompt.

The Bourne Shell has the following subcategories −

  • Bourne shell (sh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)
  • POSIX shell (sh)

The different C-type shells follow −

  • C shell (csh)
  • TENEX/TOPS C shell (tcsh)

The original Unix shell was written in the mid-1970s by Stephen R. Bourne while he was at the AT&T Bell Labs in New Jersey.

Bourne shell was the first shell to appear on Unix systems, thus it is referred to as «the shell».

Bourne shell is usually installed as /bin/sh on most versions of Unix. For this reason, it is the shell of choice for writing scripts that can be used on different versions of Unix.

In this chapter, we are going to cover most of the Shell concepts that are based on the Borne Shell.

Основные Bash-функции

Ниже показан один из основных примеров функции bash:

#!/bin/bash
testfunction(){
   echo "Моя первая функция"
}
testfunction

Если вы сохраните этот скрипт в testFunction.sh и выполните его как ./testFunction.sh, в выводе вы увидите:

Моя первая функция

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

#!/bin/bash
testfunction
testfunction(){
   echo "Моя первая функция"
}

Сначала вам нужно определить функцию, а затем вызвать её.

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

#!/bin/bash
testfunction(){
   echo $1
   echo $2
}
testfunction "Hello" "World"

Вы также можете использовать интерактивный ввод и выполнять функции bash. Один из таких примеров показан ниже:

#!/bin/bash
addition(){
   sum=$(($1+$2))
   return $sum
}
read -p "Enter a number: " int1
read -p "Enter a number: " int2
add $int1 $int2
echo "The result is : " $?

В приведённом выше примере значение сложения присваивается в переменной sum, и оно возвращается из функции. Интерактивный ввод осуществляется с использованием read для обоих чисел. Наконец, результат печатается с использованием параметра $?, который хранит возвращаемое значение $sum из функции.

Функции Bash всегда возвращают одно значение.

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

Bash-скрипты поддерживают:

  • Цикл while
  • Цикл for
  • Стейтмент if
  • Логическое И
  • Логическое Или
  • Стейтмент else if
  • Оператор case

Ниже приведён пример цикла while.

#!/bin/bash
isvalid=true
count=1
while 
do
echo $count
if ;
then
break
fi
((count++))
done

В примере используются операторы while и if. Это выполняет цикл while 5 раз перед выходом после проверки условного оператора if.

Вот результат:

1
2
3
4
5

Цикл for может использоваться как для увеличения, так и для уменьшения счетчиков. Один из таких примеров цикла for показан ниже:

#!/bin/bash
for (( count=10; count>0; count-- ))
do
echo -n "$count "
done

А вот вывод этого цикла:

10 9 8 7 6 5 4 3 2 1

В Bash && обозначает логическое И, в то время как || представляет логическое ИЛИ.

С помощью операторов If мы также можем определить Else if. Один из таких примеров показан ниже:

#!/bin/bash
echo "Enter a valid number"
read n
if ;
then
echo "This is first number"
elif ;
then
echo " This is second number "
elif ;
then
echo " This is third number "
else
echo "No numbers over here"
fi

А теперь похожий пример, но с оператором case:

#!/bin/bash
echo " Enter a valid number"
read n
case $n in
101)
Echo " This is the first number " ;;
510)
echo " This is the second number " ;;
999)
echo " This is the third number " ;;
*)
echo " No numbers over here " ;;
esac

В стейтментах case ;; означает конец case.

Резюме файла SH

Согласно нашим записям, существуют два тип(ы) файлов, связанных с расширением SH, самый популярный из которых отформатирован в качестве Bash Shell Script. Самое распространенное связанное приложение — Notepad++, выпущенное Don Ho. Кроме того, два различные программы позволяют вам просматривать эти файлы.
Большинство файлов SH относятся к Developer Files, однако они также могут относится к Compressed Files.

Файлы с расширением SH были идентифицированы на настольных компьютерах (и некоторых мобильных устройствах). Они полностью или частично поддерживаются Windows, Mac и Linux.

Рейтинг популярности файлов SH составляет «Низкий», что означает, что данные файлы встречаются редко.

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:

#!/bin/bashecho «Hello World !»
运行实例 »

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

运行 Shell 脚本有两种方法:

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
/bin/php test.php

Устранение неполадок при открытии файлов SH3D

Общие проблемы с открытием файлов SH3D

Sweet Home 3D не установлен

Дважды щелкнув по файлу SH3D вы можете увидеть системное диалоговое окно, в котором сообщается «Не удается открыть этот тип файла». В этом случае обычно это связано с тем, что на вашем компьютере не установлено Sweet Home 3D для %%os%%. Так как ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его дважды щелкнув на него.

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

Установлена неправильная версия Sweet Home 3D

В некоторых случаях у вас может быть более новая (или более старая) версия файла Sweet Home 3D Design File, не поддерживаемая установленной версией приложения. При отсутствии правильной версии ПО Sweet Home 3D (или любой из других программ, перечисленных выше), может потребоваться загрузить другую версию ПО или одного из других прикладных программных средств, перечисленных выше. Такая проблема чаще всего возникает при работе в более старой версии прикладного программного средства с файлом, созданным в более новой версии, который старая версия не может распознать.

Совет: Иногда вы можете получить общее представление о версии файла SH3D, щелкнув правой кнопкой мыши на файл, а затем выбрав «Свойства» (Windows) или «Получить информацию» (Mac OSX).

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

Даже если на вашем компьютере уже установлено Sweet Home 3D или другое программное обеспечение, связанное с SH3D, вы все равно можете столкнуться с проблемами во время открытия файлов Sweet Home 3D Design File. Если проблемы открытия файлов SH3D до сих пор не устранены, возможно, причина кроется в других проблемах, не позволяющих открыть эти файлы. Такие проблемы включают (представлены в порядке от наиболее до наименее распространенных):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector