notes/start_bash.md

6.6 KiB
Raw Blame History

Немного 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

вверх