Linux - Control-операторы
Вступление
На этом занятии мы рассмотрели различные управляющие операторы, такие как точка с запятой (;), амперсанд (&), знак доллара ($?), Двойной амперсанд (&&), двойная вертикальная черта (||), объединение (&&) и (|| ), знак решетки (#), экранирование специальных символов (), обратный слеш в конце строки и т. д. Мы также кратко обсудим связанные параметры ($?) и аналогичные специальные символы (&).
точка с запятой(;)
Вы можете поместить две или более команд в одну строку, разделенные точкой с запятой (;). Оболочка будет сканировать строку, пока не достигнет точки с запятой. Все аргументы перед этой точкой с запятой будут рассматриваться как отдельная команда из всех аргументов после точки с запятой. Обе серии будут выполняться последовательно с оболочкой, ожидающей завершения каждой команды перед началом следующей.
[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 программирования