342 lines
6.6 KiB
Markdown
342 lines
6.6 KiB
Markdown
|
### Немного 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)
|
|||
|
|
|||
|
***
|