# L5. Bash Scripting. Part 1 ## Bash scripts * сценарии командной строки, написанные для оболочки bash * наборы тех же самых команд, которые можно вводить с клавиатуры, собранные в файлы и объединённые некоей общей целью * результаты работы команд могут представлять либо самостоятельную ценность, либо служить входными данными для других команд --- ## Syntax #### Shebang #!/bin/bash #### Script Example ```bash= #!/bin/bash # This is a comment pwd whoami ``` --- ## Script permissions ![](https://i.imgur.com/kwmf91J.png) ```bash= chmod +x <script> ``` ![](https://i.imgur.com/cyHGNAr.png) --- ## Output ```bash= #!/bin/bash # our comment is here echo "The current directory is:" pwd echo "The user logged in is:" whoami ``` ![](https://i.imgur.com/UarTJ4f.png) --- ## Variables * Environment * User #### Environment ```bash= #!/bin/bash # display user home echo "Home for the current user is: $HOME" ``` #### User ```bash= #!/bin/bash # testing variables grade=5 person="Adam" echo "$person is a good boy, he is in grade $grade" ``` --- ## Command substitution ```bash= #!/bin/bash mydir1=`pwd` echo $mydir1 mydir1=$(pwd) echo $mydir2 ``` --- ## Math $(( a + b )) ```bash= #!/bin/bash var1=$(( 5 + 5 )) echo $var1 var2=$(( $var1 * 2 )) echo $var2 ``` --- ## If statement #### If-then if command; then do something fi ```bash= #!/bin/bash user=estroev if grep $user /etc/passwd then echo "The user $user Exists" fi ``` #### If-then-else if command; then do something else do another thing fi ```bash= #!/bin/bash user=anotherUser if grep $user /etc/passwd then echo "The user $user Exists" else echo "The user $user doesn’t exist" fi ``` #### If-then-elif if condition1; then commands elif condition2; then commands fi ```bash= #!/bin/bash user=anotherUser if grep $user /etc/passwd then echo "The user $user Exists" elif ls /home then echo "The user doesn’t exist but anyway there is a directory under /home" fi ``` --- ## Comparisons #### Numeric :::info n1 -eq n2: Возвращает истинное значение, если n1 равно n2. n1 -ge n2: Возвращает истинное значение, если n1больше или равно n2. n1 -gt n2: Возвращает истинное значение, если n1 больше n2. n1 -le n2: Возвращает истинное значение, если n1меньше или равно n2. n1 -lt n2: Возвращает истинное значение, если n1 меньше n2. n1 -ne n2: Возвращает истинное значение, если n1не равно n2. ::: ```bash= #!/bin/bash val1=6 if [ $val1 -gt 5 ] then echo "The test value $val1 is greater than 5" else echo "The test value $val1 is not greater than 5" fi ``` #### Strings :::info str1 = str2: Проверяет строки на равенство, возвращает истину, если строки идентичны. str1 != str2: Возвращает истину, если строки не идентичны. str1 < str2: Возвращает истину, если str1меньше, чем str2. str1 > str2: Возвращает истину, если str1больше, чем str2. -n str1: Возвращает истину, если длина str1больше нуля. -z str1: Возвращает истину, если длина str1равна нулю. ::: ```bash= #!/bin/bash user ="estroev" if [$user = $USER] then echo "The user $user is the current logged in user" fi ``` :::warning ```bash= #!/bin/bash val1=text val2="another text" if [ $val1 \> "$val2" ] then echo "$val1 is greater than $val2" else echo "$val1 is less than $val2" fi ``` ::: #### Files :::info -d file: Проверяет, существует ли файл, и является ли он директорией. -e file: Проверяет, существует ли файл. -f file: Проверяет, существует ли файл, и является ли он файлом. -r file: Проверяет, существует ли файл, и доступен ли он для чтения. -s file: Проверяет, существует ли файл, и не является ли он пустым. -w file: Проверяет, существует ли файл, и доступен ли он для записи. -x file: Проверяет, существует ли файл, и является ли он исполняемым. file1 -nt file2: Проверяет, новее ли file1, чем file2. file1 -ot file2: Проверяет, старше ли file1, чем file2. -O file: Проверяет, существует ли файл, и является ли его владельцем текущий пользователь. -G file: Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя. ::: ```bash= #!/bin/bash mydir=/home/estroev if [ -d $mydir ] then echo "The $mydir directory exists" cd $ mydir ls else echo "The $mydir directory does not exist" fi ```