Linux — Control-операторы

Введение

В этом сеансе мы рассмотрели различные управляющие операторы, такие как точка с запятой (;), амперсанд (&), знак вопроса в долларах ($?), двойной амперсанд (&&), двойной вертикальная черта (||), сочетание (&&) и (||), знак решетки (#), экранирование специальных символов (), обратная косая черта в конце строки и т. д. Мы также кратко обсудим связанные параметры ($?) и аналогичные специальные символы (&).

точка с запятой (;)

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

  [email protected]: ~ $ echo RamRam [email protected]: ~  $ echo ShyamShyam [адрес электронной почты защищен]: ~ $ echo Ram;  echo ShyamRamShyam [адрес электронной почты защищен]: ~ $  

амперсанд (&)

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

  [email protected]: ~ $ sleep 20 & [1] 3124 [email protected]: ~ $  [1] + Done sleep 20  

Техническое объяснение того, что происходит в этом случае, объясняется в главе о процессах.

знак вопроса в виде доллара ($?)

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

  [email protected]: ~ $ touch file1 [email protected]: ~ $ echo  $? 0 [защита электронной почты]: ~ $ rm file1 [защита электронной почты]: ~ $ echo $? 0 [защита электронной почты]: ~ $ rm file1rm: невозможно удалить? File1 ?: Нет такого файла или каталога [защита электронной почты]: ~  $ echo $? 1 [электронная почта защищена]: ~ $  

двойной амперсанд (&&)

Оболочка интерпретирует && как логическое И. При использовании && вторая команда выполняется только в случае успеха первой (возвращает нулевой статус выхода).

  [email protected]: ~ $ echo Ram && echo ShyamRamShyam [email  protected]: ~ $ zecho Ram && echo Shyam Не найдена команда 'zecho', вы имели в виду: Команда 'aecho' из пакета 'netatalk' (вселенная) Команда 'echo' из пакета 'coreutils' (основной) zecho: command not found  

Следующий пример (принцип логического И) начинается с рабочего компакт-диска, за которым следует ls, затем нерабочий компакт-диск, за которым не следует ls.

  [защита электронной почты]: ~ $ cd gen && lsbash: cd: gen: Нет такого файла или каталога [защита электронной почты]: ~ $ cd gen && lsbash: cd: gen  : Нет такого файла или каталога  

двойная вертикальная черта (||)

|| представляет собой логическое ИЛИ. Вторая команда выполняется только в случае сбоя первой команды (возвращает ненулевой статус выхода).

  [email protected]: ~ $ echo Ram ||  эхо Шьям;  echo MadhuRamMadhu [адрес электронной почты защищен]: ~ $ zecho Ram ||  эхо Шьям;  echo MadhuНет команды 'zecho', вы имели в виду: Команда 'echo' из пакета 'coreutils' (основной) Команда 'aecho' из пакета 'netatalk' (вселенная) zecho: команда не найденаShyamMadhu [электронная почта защищена]: ~ $  

Вот еще один пример того же принципа логического ИЛИ.

  [электронная почта защищена]: ~ $ cd gen ||  lsbash: cd: gen: Нет такого файла или каталога ABC.png MyTestajax-php-mysql-user-interface.html part1count part2Desktop part3Documents PicturesDownloads pngexamples.desktop Publicfile2 sqlite3FileA sqlite-amalgamation-3080500  command-past-date.png sqlite-shell-linux-x86-3080500.zipmno.txt summer.pngMusic Summer.pngMyDir TemplatesMyDir1 test1MyDirA text2Myfile1.doc typescriptMYFILE1.doc VideosMYFILE2.doc xyz.txt [email protected]  > 

объединение (&&) и (||)

Вы можете использовать это логическое И и логическое ИЛИ, чтобы написать if -then-else в командной строке. В этом примере используется echo для отображения успешности выполнения команды rm.

  [email protected]: ~ $ rm file1 && echo Это сработало!  ||  echo Не удалось! rm: невозможно удалить? file1 ?: Нет такого файла или каталога Не удалось! [электронная почта защищена]: ~ $ rm file1 && echo Это сработало!  ||  echo Не удалось! rm: невозможно удалить? file1 ?: Нет такого файла или каталога Не удалось! [электронная почта защищена]: ~ $  

знак решетки (#)

Все, что написано после знака решетки (#), игнорируется оболочкой. Это полезно для написания комментария оболочки, но не влияет на выполнение команды или расширение оболочки.

  [email protected]: ~ $ mkdir test2 # мы создаем каталог [  email protected]: ~ $ cd test2 #### мы входим в каталог [email protected]: ~/test2 $ ls # он пуст? [email protected]: ~/test2 $  

экранирование специальных символов ()

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

  [электронная почта защищена]: ~/test2 $ echo Ram ;  ShyamRam;  Shyam [защита электронной почты]: ~/test2 $ echo Ram    ShyamRam Shyam [защита электронной почты]: ~/test2 $ echo escaping \  #   " 'escaping  #"' [защита электронной почты]: ~ /test2 $ echo escaping \?  *  " 'escaping ? *"' [email protected]: ~/test2 $  

конец обратная косая черта в строке

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

  [email protected]: ~/test2  $ echo Ram is > good > boyRam is good boy [email protected]: ~/test2 $  

еще один пример обратной косой черты в конце строки

  [электронная почта защищена]: ~/test2 $ echo Конец > строки > обратная косая черта Конец строки обратная косая черта [защита электронной почты]: ~/test2 $  

Упражнение и решение:

1. Какой файл запускается при вводе passwd?

 which passwd 

2. Что это за файл?

Код:

  file/usr/bin/passwd  

3. Выполните команду pwd дважды . (запомните 0.)

Код:

  pwd;  pwd  

4. Выполнять команду ls после cd/etc, но только если cd/etc не сработал.

Код:

  cd/etc && ls  

5 . Выполнять cd/etc после cd и т. д., но только в случае сбоя cd и т. д.

Код:

  cd и т. д. ||  cd/etc  

6. Выполнить sleep 7, что делает эта команда?

 с паузой на семь секунд  

7. Выполнить 500 сна в фоновом режиме.

 sleep 500 & 

8. Напишите командную строку, которая выполняет команду rm abcd. В командной строке должно быть напечатано «успешно», если abcd удален, и «сбой», если возникла проблема.

Код:

  rm abcd && echo success ||  эхо не удалось  

Оцените статью
nanomode.ru
Добавить комментарий