Bash

Материал из sysadm
Перейти к навигации Перейти к поиску

Обзор

bash - это наиболее популярный но не единственный командный интерпретатор в среде Linux.

Исполняемый файл обычно расположен здесь /bin/bash.

Код скрипта должен начинаться строкой

#!/bin/bash

Варианты запуска скрипта

# текущий командный интерпретатор запустит интерпретатор bash как дочерний процесс, который выполнит скрипт
/bin/bash /home/myuser/myscript.sh

# текущий интерпретатор выполнит скрипт в рамках своего процесса,
# если в строке #! не задан другой тип интерпретатора 
. /home/myuser/myscript.sh

Циклы

for

По списку

for <var> in <list>
do
  команды
done

<list> := если путь к каталогу, то перечисляется содержимое каталога
<list> := если текст, то перечисляются фрагменты текста, разделитель определяется переменной $IFS. По умолчанию, IFS=' '.

# пример перечисления строк файла
IFS=$'\n'
for a in $(cat /etc/password)
do 
  echo $a
done

# пример перечисления массива
myArr[0]='item1'
myArr[1]='item2'
myArr[2]='item3'

for i in "${!myArr[@]}"
do
  echo ${myArr[$i]}
done


В стиле С

for (( i=0; i<10; i++ ))
do
  команды
done

команды управления циклом

# прервать текущую итерацию и перейти к следующей
continue

# прервать цикл
break

Cкобки (brackets)

Ссылки по теме:

( ... ) - блок команд, выполняется в рамках отдельного дочернего процесса

a=2
(
  a=3
  echo $a
)
echo $a

#вывод будет таким
3
2

{ ... } - блок команд, выполняются в рамках текущего процесса

a=2
{
  a=3
  echo $a
}
echo $a

#вывод будет таким
3
3

<( ... ) - блок команд, вывод которых передается в динамически создаваемую область памяти, при этом сам блок возвращает путь к этой области в виде /dev/fd/63. Также необходимо учитывать, что данные области памяти удаляются сразу после выполнения первого дочернего процесса запущенного скриптом.

echo <(echo test1; echo test2) <(echo test3)

#вывод
/dev/fd/63 /dev/fd/62

cat <(echo test1; echo test2) <(echo test3)

#вывод
test1
test2
test3

Ввод пароля

echo password:
read -s pass
mysql -u root -p $pass