кодесурса
«Linux

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

script1adsense2code
script1adsense3code

Вступление

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

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

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

 [email protected]:~$ echo Ram
Ram
[email protected]:~$ echo Shyam
Shyam
[email protected]:~$ echo Ram ; echo Shyam
Ram
Shyam
[email protected]:~$ 

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

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

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

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

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

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

[email protected]:~$ touch file1
[email protected]:~$ echo $?
0
[email protected]:~$ rm file1
[email protected]:~$ echo $?
0
[email protected]:~$ rm file1
rm: cannot remove ?file1?: No such file or directory
[email protected]:~$ echo $?
1
[email protected]:~$

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

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

 [email protected]:~$ echo Ram  && echo Shyam
Ram
Shyam
[email protected]:~$ zecho Ram && echo Shyam
No command 'zecho' found, did you mean:
 Command 'aecho' from package 'netatalk' (universe)
 Command 'echo' from package 'coreutils' (main)
zecho: command not found

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

[email protected]:~$ cd gen && ls
bash: cd: gen: No such file or directory
[email protected]:~$ cd gen && ls
bash: cd: gen: No such file or directory

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

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

[email protected]:~$ echo Ram || echo Shyam ; echo Madhu
Ram
Madhu
[email protected]:~$ zecho Ram || echo Shyam; echo Madhu
No command 'zecho' found, did you mean:
 Command 'echo' from package 'coreutils' (main)
 Command 'aecho' from package 'netatalk' (universe)
zecho: command not found
Shyam
Madhu
[email protected]:~$ 

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

[email protected]:~$ cd gen || ls
bash: cd: gen: No such file or directory
ABC.png                             MyTest
ajax-php-mysql-user-interface.html  part1
count                               part2
Desktop                             part3
Documents                           Pictures
Downloads                           png
examples.desktop                    Public
file2                               sqlite3
FileA                               sqlite-amalgamation-3080500 (2)
FileB                               sqlite-amalgamation-3080500.zip
linux-command-past-date.png         sqlite-shell-linux-x86-3080500.zip
mno.txt                             summer.png
Music                               Summer.png
MyDir                               Templates
MyDir1                              test1
MyDirA                              text2
Myfile1.doc                         typescript
MYFILE1.doc                         Videos
MYFILE2.doc                         xyz.txt
[email protected]:~$

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

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

[email protected]:~$ rm file1 && echo It worked! || echo It failed!
rm: cannot remove ?file1?: No such file or directory
It failed!
[email protected]:~$ rm file1 && echo It worked! || echo It failed!
rm: cannot remove ?file1?: No such file or directory
It failed!
[email protected]:~$

знак фунта стерлингов (#)

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

[email protected]:~$ mkdir test2    # we create a directory
[email protected]:~$ cd test2      #### we enter the directory 
[email protected]:~/test2$ ls      # is it empty?
[email protected]:~/test2$

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

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

[email protected]:~/test2$ echo Ram \; Shyam
Ram ; Shyam
[email protected]:~/test2$ echo Ram\ \ \ Shyam
Ram   Shyam
[email protected]:~/test2$ echo escaping \\\ \#\ \"\ \'
escaping \ # " '
[email protected]:~/test2$ echo escaping \\\?\*\"\'
escaping \?*"'
[email protected]:~/test2$

обратный слеш в конце строки

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

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

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

[email protected]:~/test2$ echo End of\
> line \
> backslash
End ofline backslash
[email protected]:~/test2$

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

1. Когда вы вводите passwd, какой файл выполняется?

 который 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 etc || cd /etc

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

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

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

 спать 500

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

Код:

rm abcd && echo success || echo failed

Предыдущая: Команды Linux
Далее: Linux - Работа с каталогами

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code