6.6 KiB
Немного bash
top
args | Позиционные аргументы
var | Переменные
read | запрос ввода
if... then... else
for
&& и ||
while
until
case
args
Позиционные аргументы
#!/bin/bash
# запусти скрипт с несколькими аргументами
echo Первый аргумент - $1
echo Второй аргумент - $2
echo Третий аргумент - $3
примеры запуска скрипта
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
Перебор аргументов в цикле
#!/bin/bash
# run this script with a few arguments
echo you have entered $# arguments
for i in "$@"; do
echo $i
done
exit 0
$#
- счетчик, показывающий, сколько аргументов было использовано при запуске сценарий.
$@
- относится ко всем аргументам, которые использовались при запуске сценария.
пример запуска скрипта
user@host:~$ ./scr arg1 arg2 arg3 arg4
you have entered 4 arguments
arg1
arg2
arg3
arg4
var
Переменные
var=value
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
read
Запрос ввода
#!/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
пример запуска скрипта
user@host:~$ ./scr Катя
Вы ввели - Катя
user@host:~$ ./scr
Введите имя
Ира
Вы ввели - Ира
if
if... then... else
#!/bin/bash
# скрипт проверяет тип файла, переданного в качестве аргумента при запуске
if [ -f $1 ]
then
echo "$1 - это файл"
elif [ -d $1 ]
then
echo "$1 - это директория"
else
echo "Не понятно, что это \$1"
fi
exit 0
пример запуска
[da2001@co1 scripts]$ ./filechk /etc/hosts
/etc/hosts - это файл
[da2001@co1 scripts]$ ./filechk /etc
/etc - это директория
[da2001@co1 scripts]$ ./filechk ./non_exist_file
Не понятно, что это $1
for
#!/bin/bash
for i in {0..6}
do
echo "Hi $i"
done
user@host:~$ ./scr
Hi 0
Hi 1
Hi 2
Hi 3
#!/bin/bash
for i in Ира Лена Катя
do
echo "Hi, $i"
done
user@host:~$ ./scr
Hi, Ира
Hi, Лена
Hi, Катя
#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Hi $c"
done
user@host:~$ ./scr
Hi 1
Hi 2
Hi 3
Hi 4
Hi 5
#!/bin/bash
for (( c=4; c>=0; c-- ))
do
echo "Hi $c"
done
user@host:~$ ./scr
Hi 4
Hi 3
Hi 2
Hi 1
Hi 0
and, or
&& и ||
&&
- логическое И. Вторая часть оператора будет выполнена только если первая часть истинна.
||
- логическое ИЛИ. Вторая часть оператора будет выполнена только если первая часть неверна.
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 - НЕ доступен
while
while
- выполнять пока условие истинно
#!/bin/bash
x=1
while [ $x -lt 5 ]
do
echo "Значение счетчика: $x"
x=$(( $x + 1 ))
done
user@host:~$ ./scr
Значение счетчика: 1
Значение счетчика: 2
Значение счетчика: 3
Значение счетчика: 4
until
until
- выполнять пока условие ложно
#!/bin/bash
count=1
until [ $count -gt 4 ]
do
echo "Значение счетчика: $count"
count=$(( $count + 1 ))
done
user@host:~$ ./scr
Значение счетчика: 1
Значение счетчика: 2
Значение счетчика: 3
Значение счетчика: 4
case
case
- перебор условий
#!/bin/bash
echo -n "Введите страну: "
read COUNTRY
echo -n "Официальный язык в стране $COUNTRY это "
case $COUNTRY in
Литва)
echo "Латвийский"
;;
Румыния | Молдова)
echo "Румынский"
;;
Италия | "Сан Марино" | Швейцария | "Ватикан")
echo "Итальянский"
;;
*)
echo "unknown"
;;
esac
- каждое условие заканчивается
)
- после условия описываются команды, которые необходимо выполнить, в конце ставится
;;
*)
относится ко всем остальным значениям, которые явно не указаны ранее
user@host:~$ ./scr
Введите страну: Ватикан
Официальный язык в стране Ватикан это Итальянский
user@host:~$ ./scr
Введите страну: Россия
Официальный язык в стране Россия это unknown