[*]
Shell е основната част на Linux. Позволява ви да взаимодействате с ядрото на Linux, като използвате различни команди като cd, ls, cat и др.
Bash е една от многото налични обвивки за Linux. Те имат предимно общ, но не идентичен синтаксис. Bash е най-популярната обвивка там и е по подразбиране в повечето Linux дистрибуции.
Отваряте терминал или SSH сесия и имате работеща обвивка в нея, дори ако не можете наистина да я визуализирате.
Когато въведете команда, тя се интерпретира от обвивката. Ако командата и синтаксисът са правилни, тя ще бъде изпълнена, в противен случай ще видите грешка.
Защо bash скриптове, когато можете просто да изпълнявате Linux команди?
Можете да въведете командите директно в терминала и те ще бъдат изпълнени.
abhishek@itsfoss:~$ echo "hello world"
hello world
И същото може да се направи и в скрипт:
abhishek@itsfoss:~$ cat >> script.sh
#!/bin/bash
echo "hello world"
abhishek@itsfoss:~$ bash script.sh
hello world
Защо са ви нужни шел скриптове тогава? Защото не е нужно да въвеждате една и съща команда отново и отново. Просто стартирате скрипта на обвивката.
Освен това, ако имате сложна логика в скрипта си, въвеждането на всичко в терминала няма да е добра идея.
Например, ако въведете командата по-долу, тя ще работи. Но не е лесно за разбиране и въвеждането му отново и отново (или дори търсенето му в историята на bash) е болка.
if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi
Вместо това можете да поставите shell скрипт, така че да е по-лесен за разбиране и да го стартирате без усилие:
#!/bin/bash
if [ $(whoami) = 'root' ]; then
echo "You are root"
else
echo "You are not root"
fi
Това все още беше просто. Представете си сложен сценарий с петдесет или сто реда!
Какво ще научите?
Има девет раздела в този урок за bash скриптове. Ще се научите да:
- Създайте и стартирайте първия си bash shell скрипт
- Използвайте променливи
- Предавайте аргументи и приемайте потребителски въведени данни във вашите bash скриптове
- Извършете математически изчисления
- Манипулиране на низове
- Използвайте условни изрази като if-else
- Използвайте цикли for, while и until
- Създаване на функции
💡
Всички раздели ще ви дадат кратък пример. Ако желаете, можете да разширите раздела, като посетите подробната глава за всеки раздел. Тези глави съдържат и практически упражнения.
Коя е целевата аудитория?
Всеки, който иска да започне да учи скриптове на bash shell.
Ако сте студент със скриптове на shell като част от учебната програма на курса си, тази поредица е за вас.
Ако сте редовен потребител на настолен Linux, тази серия ще ви помогне да разберете повечето скриптове на обвивката, които срещате, докато проучвате различен софтуер и корекции. Можете също така да го използвате за автоматизиране на някои общи, повтарящи се задачи.
До края на този урок за bash скриптове трябва да можете да пишете прости bash скриптове.
🚧
Желателно е да имате основни познания по командния ред на Linux и всеки език за програмиране.
Ако сте абсолютно нов в командния ред на Linux, съветвам ви първо да разберете основите.
19 основни, но съществени съвета за терминал на Linux, които трябва да знаете
Научете някои малки, основни, но често пренебрегвани неща за терминала. С малките съвети трябва да можете да използвате терминала с малко по-голяма ефективност.

Трябва да разберете как да отидете до конкретно място в командния ред. За целта трябва да разберете как работи пътят във файловата система на Linux.
Абсолютен срещу относителен път в Linux: Каква е разликата?
В тази основна глава за изучаване на Linux научете за относителните и абсолютните пътища в Linux. Каква е разликата между тях и кой трябва да използвате.

След това тази поредица от уроци ви дава основите на навигацията в директорията и манипулирането на файлове.
Първи стъпки с Linux терминал
Искате ли да знаете основите на командния ред на Linux? Ето поредица от уроци с практически подход.

1. Писане на вашия първи bash shell скрипт
Създайте нов файл с име hello.sh
:
nano hello.sh
Това ще отвори нано редактора в терминала. Въведете следните редове към него:
#!/bin/bash
echo "Hello World"
Запазете и излезте от нано редактора, като натиснете клавиша Ctrl+X.
Сега можете да изпълните bash shell скрипта по следния начин:
bash hello.sh
И трябва да видите следния резултат:
Hello World
Друг начин е първо да дадете разрешение за изпълнение на скрипта:
chmod u+x hello.sh
И след това го стартирайте по този начин:
./hello.sh
💡
Можете също така да използвате GUI базиран текстов редактор, за да напишете скрипта. Това вероятно ще бъде по-лесно за писане на по-дълги скриптове. Трябва обаче да превключите към директорията, в която е записан скриптът, за да го стартирате.
Честито! Току-що стартирахте първия си bash скрипт.
Bash Basics #1: Създайте и стартирайте първия си Bash Shell скрипт
Започнете да изучавате bash скриптове с тази нова серия. Създайте и стартирайте първия си bash shell скрипт в първата глава.

2. Използване на променливи в bash скриптове
Променливите се декларират по следния начин:
var=some_value
И тогава променливата се осъществява по следния начин:
$var
🚧
Не трябва да има интервал преди и след = при деклариране на променлива.
Нека модифицираме предишния скрипт, като добавим променлива.
#!/bin/bash
message="Hello World"
echo $message
Резултатът ще остане същият, ако изпълните този скрипт:
Hello World
Bash Basics #2: Използвайте променливи в Bash скриптове
В тази глава от поредицата Bash Basics научете за използването на променливи в Bash скриптове.

3. Предаване на аргументи към bash скрипта
Можете да предавате аргументи на bash скрипт, докато го изпълнявате по следния начин:
./my_script.sh arg1 arg2
Вътре в скрипта можете да използвате $1 за първия аргумент, $2 за втория аргумент и т.н. $0 е специална променлива, която съдържа името на скрипта, който се изпълнява.
Сега създайте нов шел скрипт с име arguments.sh
и добавете към него следните редове:
#!/bin/bash
echo "Script name is: $0"
echo "First argument is: $1"
echo "Second argument is: $2"
Направете го изпълним и го стартирайте по следния начин:
abhishek@itsfoss:~$ ./argument.sh abhishek prakash
Script name is: ./argument.sh
First argument is: abhishek
Second argument is: prakash
Ето един бърз поглед към специалните променливи:
Специална променлива | Описание |
---|---|
$0 | Име на скрипта |
$1, $2…$9 | Аргументи на скрипта |
${n} | Аргументи на скрипта от 10 до 255 |
$# | Брой аргументи |
$@ | Всички аргументи заедно |
$$ | Идентификатор на процеса на текущата обвивка |
$! | ID на процеса на последната изпълнена команда |
$? | Състояние на изход от последната изпълнена команда |
Можете също така да направите вашия bash скрипт интерактивен, като приемате потребителско въвеждане от клавиатурата.
За целта ще трябва да използвате командата read. Можете също да използвате read -p
команда за подканване на потребителя за въвеждане от клавиатурата без команда ехо.
#!/bin/bash
echo "What is your name, stranger?"
read name
read -p "What's your full name, $name? " full_name
echo "Welcome, $full_name"
Сега, ако стартирате този скрипт, ще трябва да въведете „аргументите“, когато бъдете подканени за това.
abhishek@itsfoss:~$ ./argument.sh
What is your name, stranger?
abhishek
What's your full name, abhishek? abhishek prakash
Welcome, abhishek prakash
Основи на Bash #3: Предавайте аргументи и приемайте потребителски въведени данни
Научете как да предавате аргументи на bash скриптове и да ги правите интерактивни в тази глава от поредицата Bash Basics.

4. Извършване на аритметична операция
Синтаксисът за аритметични операции в bash shell е следният:
$((arithmetic_operation))
Ето списъка с аритметичните операции, които можете да извършвате в bash
Оператор | Описание |
---|---|
+ | Допълнение |
– | Изваждане |
* | Умножение |
/ | Целочислено деление (без десетичен знак) |
% | Модулно деление (само остатък) |
** | Степеняване (a на степен b) |
Ето пример за извършване на сумиране и изваждане в bash скрипт:
#!/bin/bash
read -p "Enter first number: " num1
read -p "Enter second number: " num2
sum=$(($num1+$num2))
sub=$(($num1-$num2))
echo "The summation of $num1 and $num2 is $sum"
echo "The substraction of $num2 from $num1 is $sub"
Можете да изпълните shell скрипта с произволен номер по ваш избор.

Има голям проблем, ако опитате разделението. Bash работи само с цели числа. Той няма концепцията за десетични числа по подразбиране. И по този начин ще получите 3 като резултат от 10/3 вместо 3,333.
За операции с плаваща запетая ще трябва да използвате командата bc по следния начин:
#!/bin/bash
num1=50
num2=6
result=$(echo "$num1/$num2" | bc -l)
echo "The result is $result"
И този път ще видите точен резултат.
The result is 8.33333333333333333333
Bash Basics Series #4: Аритметични операции
В четвъртата глава от поредицата се научете да използвате основна математика в Bash.

5. Използване на масиви в bash скриптове
Вместо да използвате множество променливи, можете да използвате масиви в bash, за да съхранявате стойности в една и съща категория.
Можете да декларирате масив по този начин:
distros=(Ubuntu Fedora SUSE "Arch Linux" Nix)
За достъп до елемент използвайте:
${array_name[N]}
Както повечето други езици за програмиране, индексът на масива започва от 0.
Можете да покажете всички елементи на масив по този начин:
${array[*]}
И вземете дължината на масива по този начин:
${#array_name[@]}
Bash Basics Series #5: Използване на масиви в Bash
Време е да използвате масиви в bash shell скриптове в тази глава. Научете се да добавяте елементи, да ги изтривате и да получавате дължина на масива.

6. Основна операция с низове в Bash
Bash е способен да извършва редица операции с низове.
Можете да получите дължината на низа по този начин:
${#string}
Свържете два низа:
str3=$str1$str2
Извлечете подниз, като предоставите началната позиция на подниза и неговата дължина:
${string:$pos:$len}
Ето един пример:

Можете също да замените част от дадения низ:
${string/substr1/substr2}
И можете също да изтриете подниз от дадения низ:
${string/substring}
Bash Basics Series #6: Работа с операции с низове
В тази глава от поредицата Основи на Bash се научете да извършвате различни общи операции с низове като извличане, заместване и изтриване на поднизове.

7. Използвайте условни изрази в Bash
Можете да добавите условна логика към вашите bash скриптове, като използвате изрази if или if-else. Тези твърдения завършват с fi
.
Синтаксисът за един оператор if е:
if [ condition ]; then
your code
fi
Обърнете внимание на употребата [ ... ];
и then
.
Синтаксисът за израза if-else е:
if [ expression ]; then
## execute this block if condition is true else go to next
elif [ expression ]; then
## execute this block if condition is true else go to next
else
## if none of the above conditions are true, execute this block
fi
Ето примерен bash скрипт, който използва оператор if-else:
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
else
echo "Number $num is odd"
fi
Стартирайте го и трябва да видите резултат като този:

The -eq
се нарича тестово условие или условен оператор. Има много такива оператори, за да ви дадат различни видове сравнение:
Ето операторите на тестовите условия, които можете да използвате за числено сравнение:
Състояние | Еквивалентно на true when |
---|---|
$a -lt $b | $a по-малко Tхан $b) |
$a -gt $b | $a > $b ($a е жядец Tхан $b) |
$a и $b | $a по-малко или дкачество от $b) |
$a -ge $b | $a >= $b ($a е жретер или дкачество от $b) |
$a -eq $b | $a е равно на $b |
$a -ne $b | $a не е равно на $b |
Ако сравнявате низове, можете да използвате следните тестови условия:
Състояние | Еквивалентно на true when |
---|---|
“$a” = “$b” | $a е същото като $b |
“$a” == “$b” | $a е същото като $b |
“$a” != “$b” | $a е различно от $b |
-z “$a” | $a е празен |
Има и условия за проверка на типа файл:
Състояние | Еквивалентно на true when |
---|---|
-f $a | $a е файл |
-d $a | $a е директория |
-L $a | $a е връзка |
🚧
Обърнете специално внимание на пространството. Трябва да има място между отварящите и затварящите скоби и условията. По същия начин интервалът трябва да е преди и след условните оператори (-le, == и т.н.).
Bash Basics Series #7: Инструкция If Else
Ако това, тогава онова друго нещо друго. Няма смисъл? Това ще стане, след като научите за изразите if-else в скриптовете на bash shell.

8. Използване на цикли в bash скриптове
Bash поддържа три вида цикли: for, while и until.
Ето един пример за за цикъл:
#!/bin/bash
for num in {1..10}; do
echo $num
done
Стартирайте го и ще видите следния резултат:
1
2
3
4
5
6
7
8
9
10
Ако вземете предишния пример, той може да бъде пренаписан с помощта на докато цикъл като този:
#!/bin/bash
num=1
while [ $num -le 10 ]; do
echo $num
num=$(($num+1))
done
И същото може да бъде пренаписано с помощта на до цикъл:
#!/bin/bash
num=1
until [ $num -gt 10 ]; do
echo $num
num=$(($num+1))
done
💡
Циклите while и until са доста сходни. Разликата е, че докато цикълът се изпълнява, докато условието е вярно, и докато цикълът се изпълнява, докато условието е невярно.
Основи на Bash #8: цикли For, While и Until
В предпоследната глава от поредицата Основи на Bash научете за циклите for, while и until.

9. Използване на функции в bash скриптове
Bash shell поддържа използването на функции, така че да не се налага да пишете едно и също парче код отново и отново.
Ето общия синтаксис за деклариране на bash функция:
function_name() {
commands
}
Ето примерен bash скрипт, който използва функция с аргументи:
#!/bin/bash
sum() {
sum=$(($1+$2))
echo "The sum of $1 and $2 is: $sum"
}
echo "Let's use the sum function"
sum 1 5
Ако изпълните скрипта, ще видите следния резултат:
Let's use the sum function
The sum of 1 and 5 is: 6
Bash Basics Series #9: Функции в Bash
Научете всичко за функциите в последната глава от поредицата Bash Basics.

Накъде да отида от тук?
Това е само бегъл поглед. Този урок за bash скриптове е само начален етап. Има много повече неща, които можете да разбиете със скриптове и можете да ги изследвате бавно и постепенно.
GNU bash справката е отличен онлайн ресурс за изчистване на вашите bash съмнения.
Справочно ръководство за Bash
Справочно ръководство за Bash
##Освен това, можете да изтеглите тази безплатна книга, за да научите повече bash неща, които не са разгледани тук:
След като имате достатъчно познания за основите на bash, можете да научите предварително bash скриптове с тази безплатна книга:
И двете книги са на поне десетилетие, но все още можете да ги използвате, за да научите bash.
💬 Надявам се да харесате този урок като отправна точка за изучаването на вашия bash скрипт. Моля, изпратете отзивите си в секцията за коментари.