Bash: различия между версиями
Перейти к навигации
Перейти к поиску
Admin (обсуждение | вклад) (→Циклы) |
Admin (обсуждение | вклад) |
||
Строка 31: | Строка 31: | ||
# пример, если ошибка, то | # пример, если ошибка, то | ||
+ | # ! - команда отрицания | ||
+ | # [ - команда проверки условия | ||
if ! [ $? -eq 0 ] | if ! [ $? -eq 0 ] | ||
then | then | ||
Строка 37: | Строка 39: | ||
</pre> | </pre> | ||
− | |||
= Циклы = | = Циклы = |
Версия 16:42, 4 сентября 2024
Обзор
bash - это наиболее популярный но не единственный командный интерпретатор в среде Linux.
Исполняемый файл обычно расположен здесь /bin/bash
.
Код скрипта должен начинаться строкой
#!/bin/bash
Варианты запуска скрипта
# текущий командный интерпретатор запустит интерпретатор bash как дочерний процесс, который выполнит скрипт /bin/bash /home/myuser/myscript.sh # текущий интерпретатор выполнит скрипт в рамках своего процесса, # если в строке #! не задан другой тип интерпретатора . /home/myuser/myscript.sh
Условия
if <command> then <command> else <command> fi # пример, если ошибка, то # ! - команда отрицания # [ - команда проверки условия if ! [ $? -eq 0 ] then echo ERROR fi
Циклы
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