# Shell syntax¶

When you’re working with the command line, you can use symbols or specific syntax to make your work easier, here is some of them.

## 1. User’s status¶

Knowing what symbol is shown at the beginning of your line tells you what kind of user you are.

• If you’re logged as a normal user, your line will begin with $. user@machine:~$

• If you’re logged as a root, your line will begin with #.

root@machine:~#


Tip

For the rest of the examples, we’ll consider that we are a normal user

## 2. Home¶

The symbol ~ refers to the user’s home directory.

user@machine:~$ ## 4. Ampersand¶ The ampersand symbol has two purposes. When it’s puts at the end of an instruction, it runs that instruction in the background. user@machine:~/Desktop$ gimp &
[1] 36261
user@machine:~/Desktop$ When use in double it allows to give a series of instructions that will be run sequentially. user@machine:~$ cd Desktop && mkdir new_directory


Tip

This behavior is an AND, if the Nth instruction can’t be resolved, the process stop and no further instructions will be executed.

## 5. history¶

Although we have now better way to get history (history, reverse-search) it can be useful to know that the exclamation mark ! has also access to history.

! Find command in your history (can be coupled it with a number).

user@machine:~$!1 # Get the first command. user@machine:~$ ls ~

user@machine:~$!-2 # Get penultimate command. user@machine:~$ cd Desktop && mkdir new_directory

user@machine:~/Desktop$!! # Get the last command. user@machine:~/Desktop$ gimp &


## 6. Redirection¶

Rafters are used to interact with files.

• > Redirects the standard output into a file.

user@machine:~/Desktop/new_directory$pwd > path.txt  Tip If the file exists it’s overwritten otherwise it’s created • >> Append the standard output to the end of a file. user@machine:~/Desktop/new_directory$ cat path.txt >> very_big_file.txt

• < Read content of a file into prompt.

user@machine:~/Desktop/new_directory$< path.txt /home/user/Desktop/new_directory  • << Creates a block of code with delimiter called heredoc [command] << delimiter user@machine:~/Desktop/new_directory$ cat << terminate
heredoc> line 1
heredoc> another line
heredoc> terminate
line 1
another line

• | redirects the output of a command in the input of another command

user@machine:~/Desktop/new_directory$history | grep gimp 3336 sudo apt install gimp 3812 gimp &  ## 8. Standard data stream¶ When you use your linux terminal, you have acces to 3 data stream: • standard input stream stdin, associate to number 0 • standard output stream stdout, associate to number 1 • standard error stream stderr, associate to number 2 As we can manipulate them as files, we can have them interact with some instructions. /dev/null is “the void”, anything that’s put in there goes to the limb and can’t be retrieve. let’s take the example of a command that return both standard and error messages. user@machine:~$ apt update

Lecture des listes de paquets... Fait

E: Impossible d'ouvrir le fichier verrou /var/lib/apt/lists/lock - open (13: Permission non accordée)
E: Impossible de verrouiller le répertoire /var/lib/apt/lists/
W: Problème de suppression du lien /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission non accordée)
W: Problème de suppression du lien /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission non accordée)


If we redirect 1 in /dev/null, we won’t see any standard output, just the errors.

user@machine:~$apt update 1> /dev/null E: Impossible d'ouvrir le fichier verrou /var/lib/apt/lists/lock - open (13: Permission non accordée) E: Impossible de verrouiller le répertoire /var/lib/apt/lists/ W: Problème de suppression du lien /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission non accordée) W: Problème de suppression du lien /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission non accordée)  Tip that also work with > only apt update > /dev/null  • With 2, we throw all the errors output and we’re left with standard output. user@machine:~$ apt update 2> /dev/null
Lecture des listes de paquets... Fait

• Finally,

we redirect the standard output into /dev/null.

We also we redirect (>) the errors flux (2) into the standard flux (&1).

In the end nothing appear.

user@machine:~$apt update > /dev/null 2>&1 user@machine:~$


Tip

the syntax &1 is here to avoid the creation of a file called 1 in which the output of 2 will be stored

## 9. Anything you want¶

The * symbol mean that the command will be executed with whatever can fit in place of the *.

user@machine:~/Desktop/new_directory\$ rm *.txt
'path.txt' supprimé
'very_big_file.txt' supprimé
'unsorted_name.txt' supprimé