Урок за писане на Bash скриптове за начинаещи

Сподели

[*]

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 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}

Ето един пример:

Извличане на подниз в bash

Можете също да замените част от дадения низ:

${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

Стартирайте го и трябва да видите резултат като този:

Изпълнение на bash скрипт, който проверява четните нечетни числа

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 скрипт. Моля, изпратете отзивите си в секцията за коментари.

[*]Източник: itsfoss.com

[*]Публикациите се превеждат автоматично с google translate

Loading


Сподели