notes/start_bash.md

342 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### Немного bash
###### top
[args | Позиционные аргументы](#args)
[var | Переменные](#var)
[read | запрос ввода](#read)
[if... then... else](#if)
[for](#for)
[&& и ||](#and-or)
[while](#while)
[until](#until)
[case](#case)
***
##### args
**Позиционные аргументы**
```bash
#!/bin/bash
# запусти скрипт с несколькими аргументами
echo Первый аргумент - $1
echo Второй аргумент - $2
echo Третий аргумент - $3
```
*примеры запуска скрипта*
```bash
user@host:~$ ./scr arg1 arg2 arg3
Первый аргумент - arg1
Второй аргумент - arg2
Третий аргумент - arg3
user@host:~$ ./scr arg1 arg2
Первый аргумент - arg1
Второй аргумент - arg2
Третий аргумент -
user@host:~$ ./scr arg1 arg2 arg3 arg4
Первый аргумент - arg1
Второй аргумент - arg2
Третий аргумент - arg3
```
**Перебор аргументов в цикле**
```bash
#!/bin/bash
# run this script with a few arguments
echo you have entered $# arguments
for i in "$@"; do
echo $i
done
exit 0
```
`$#` - счетчик, показывающий, сколько аргументов было использовано при запуске сценарий.
`$@` - относится ко всем аргументам, которые использовались при запуске сценария.
*пример запуска скрипта*
```bash
user@host:~$ ./scr arg1 arg2 arg3 arg4
you have entered 4 arguments
arg1
arg2
arg3
arg4
```
[вверх](#top)
***
##### var
Переменные
`var=value`
```bash
user@host:~$ var="значение переменной"
user@host:~$ echo $var
значение переменной
user@host:~$ var=8
user@host:~$ echo $var
8
user@host:~$ today=$(date +%d.%m.%Y)
user@host:~$ echo $today
03.08.2021
user@host:~$ today=`date +%d.%m.%Y`
user@host:~$ echo $today
03.08.2021
```
[вверх](#top)
***
##### read
Запрос ввода
```bash
#!/bin/bash
if [ -z $1 ]; then
echo Введите имя
read NAME
else
NAME=$1
fi
echo Вы ввели - $NAME
exit 0
```
`-z $1` - проверка существования аргумента
все возможные значения проверок в справке
`man test`
*перевод доступен здесь https://www.opennet.ru/man.shtml?topic=test&category=1&russian=0*
*пример запуска скрипта*
```bash
user@host:~$ ./scr Катя
Вы ввели - Катя
user@host:~$ ./scr
Введите имя
Ира
Вы ввели - Ира
```
[вверх](#top)
***
##### if
if... then... else
```bash
#!/bin/bash
# скрипт проверяет тип файла, переданного в качестве аргумента при запуске
if [ -f $1 ]
then
echo "$1 - это файл"
elif [ -d $1 ]
then
echo "$1 - это директория"
else
echo "Не понятно, что это \$1"
fi
exit 0
```
*пример запуска*
```bash
[da2001@co1 scripts]$ ./filechk /etc/hosts
/etc/hosts - это файл
[da2001@co1 scripts]$ ./filechk /etc
/etc - это директория
[da2001@co1 scripts]$ ./filechk ./non_exist_file
Не понятно, что это $1
```
[вверх](#top)
***
##### for
```bash
#!/bin/bash
for i in {0..6}
do
echo "Hi $i"
done
```
```bash
user@host:~$ ./scr
Hi 0
Hi 1
Hi 2
Hi 3
```
```bash
#!/bin/bash
for i in Ира Лена Катя
do
echo "Hi, $i"
done
```
```bash
user@host:~$ ./scr
Hi, Ира
Hi, Лена
Hi, Катя
```
```bash
#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Hi $c"
done
```
```bash
user@host:~$ ./scr
Hi 1
Hi 2
Hi 3
Hi 4
Hi 5
```
```bash
#!/bin/bash
for (( c=4; c>=0; c-- ))
do
echo "Hi $c"
done
```
```bash
user@host:~$ ./scr
Hi 4
Hi 3
Hi 2
Hi 1
Hi 0
```
[вверх](#top)
***
##### and, or
&& и ||
`&&` - логическое И. Вторая часть оператора будет выполнена только если первая часть истинна.
`||` - логическое ИЛИ. Вторая часть оператора будет выполнена только если первая часть неверна.
```bash
user@host:~$ for i in {10..13}; do ping -c 2 192.168.1.$i > /dev/null && echo 192.168.1.$i - доступен || echo 192.168.1.$i - НЕ доступен; done
192.168.1.10 - доступен
192.168.1.11 - доступен
192.168.1.12 - доступен
192.168.1.13 - НЕ доступен
```
[вверх](#top)
***
##### while
`while` - выполнять пока условие истинно
```bash
#!/bin/bash
x=1
while [ $x -lt 5 ]
do
echo "Значение счетчика: $x"
x=$(( $x + 1 ))
done
```
```bash
user@host:~$ ./scr
Значение счетчика: 1
Значение счетчика: 2
Значение счетчика: 3
Значение счетчика: 4
```
[вверх](#top)
***
##### until
`until` - выполнять пока условие ложно
```bash
#!/bin/bash
count=1
until [ $count -gt 4 ]
do
echo "Значение счетчика: $count"
count=$(( $count + 1 ))
done
```
```bash
user@host:~$ ./scr
Значение счетчика: 1
Значение счетчика: 2
Значение счетчика: 3
Значение счетчика: 4
```
[вверх](#top)
***
##### case
`case` - перебор условий
```bash
#!/bin/bash
echo -n "Введите страну: "
read COUNTRY
echo -n "Официальный язык в стране $COUNTRY это "
case $COUNTRY in
Литва)
echo "Латвийский"
;;
Румыния | Молдова)
echo "Румынский"
;;
Италия | "Сан Марино" | Швейцария | "Ватикан")
echo "Итальянский"
;;
*)
echo "unknown"
;;
esac
```
- каждое условие заканчивается `)`
- после условия описываются команды, которые необходимо выполнить, в конце ставится `;;`
- `*)` относится ко всем остальным значениям, которые явно не указаны ранее
```bash
user@host:~$ ./scr
Введите страну: Ватикан
Официальный язык в стране Ватикан это Итальянский
user@host:~$ ./scr
Введите страну: Россия
Официальный язык в стране Россия это unknown
```
[вверх](#top)
***