- поредица от команди, поместена в текстов файл.
-
командната процедура се изпълнява в отделен subshell, който се поражда от терминала, от който е извикана.
-
Когато процедурата приключи, тя има код на приключване (число от 0 до 255), като той може да бъде указан явно чрез
exit код
.-
ако използваме exit без параметър, то кодът на завършване на КП = кода на завършване на последната изпълнена команда преди exit.
-
Ако не е указан exit, то кодът на завършване е кодът на последно изпълнената команда от КП.
-
-
коментарите на един ред се означават с #
1.Aко нямаме права за права за изпълнение
bash path-to/command_procedure
bash -x path_to/command_procedure
- дава ни информация кои команди се изпълняват
- Добавяме право за изпълнение:
chmod a+x path_to/command_procedure
И за да изпълним командната процедура изписваме абсолютния й път
Чрез #! path_to_interpreter
задаваме кой команден интерпретатор да използваме при изпълняване на командната процедура.
Пример:
#!/bin/csh
- използваме C shell интерпретатора
#!/usr/bin/python3
- използваме python3 интерпретатор
Забележка:
Този ред сe изпълнява само ако сме изпълнили файла по този начин: ./script_name
От първото упражнение знаем че Shell и Bash са различни командни интерпетатори. Но в повечето ОС /bin/sh
е символна връзка, която няма да "събуди" шел интерпретатора, а ще изпълни това, с което е свързана.
Когато изпълняваме една командна процедура, можем да и дадем и някакви параметри:
./our_script param1 param2 ...
Командният интерпретатор присвоява тези параметри на специални системни променливи 0, 1, 2 ... като всяко число n отговаря на n-тия подаден позиционен параметър.
!!! $0 винаги пази името на командата
Така ако изпълним командната процедура our_script по този начин:
./our_script param1 param2 param3
То позиционните параметри ще за запазени по този начин:
еcho $0 # our_script
echo $1 # param1
echo $2 # param2
echo $3 # param3
-
*
- дава символен низ с параметрите от командния ред -
@
- дава масив с параметрите от командния ред -
#
- дава броя на параметрите от командния ред
Следователно относно по-горния пример:
еcho $* # param1 param2 param3
echo $@ # param1 param2 param3
echo $# # 3
Каква друга информация можем да получим в КП?
-
$
- PID на текущия процес -
?
- код на завършване на последния завършил процес -
!
- PID на последния завършил процес във фонов режим
-
В нашата командна процедура можем да променим стойностите на променливите 0, 1, 2 ...
Използваме командата
set new_pos_arg1 new_pos_arg2
Съответно ако сме имали:
echo $1 $2 $3 # param1 param2 param3
Ако някъде в КП имаме:
set new1 new2
то
echo $1 $2 $3 # new1 new2
-
Също така можем да "преместваме" стойностите на позиционните параметри наляво
shift n
- измества стойностите на позиционните параметри с n позиции налявоСъответно ако:
echo $1 $2 $3 # param1 param2 param3
и някъде в КП сме изпълнили
shift 2
то
echo $1 $2 $3 # param3
1.Да се напише командна процедура, която чете от стандартния вход име на директория. Извежда на стандартния изход информация за всички файлове в текущата директория, чиито име е точно три символа, като последният е цифрата 1,2 или 3. Записва във файла file_type първите 5 файла от прочетената директория, които съдържат ASCII текст, а за тези, които съдържат програми на Си (C file), извеждат на екрана броя им с подходящо съобщение.
-
Да се напише командна процедура, която получава при стартиране име на файл. Командната процедура изпраща съдържанието на файла до първия логически включен потребител, който е разрешил писането. След това прочита от стандартния вход име на директория и име на файл. Записва съдържанието на директорията в този файл. Ако тази директория е празна я изтрива.
-
Да се напише командна процедура, която получава при стартиране произволен брой низове. Извежда на стандартния изход броя на директориите в началната потребителска директория, чиито име съдържа първия низ. Премества с 2 позиции наляво позиционните параметри и записва новото съдържание на позиционните параметри във файл, прочетен от стандартния вход. В този файл записва датата, календара за текущия месец и PID-то на текущия процес.
-
Да се напише командна процедура, която стартира редактора vi във фонов режим. Намира PID-то на кореспондиращия процес и го убива. Извежда на стандартния изход кода на завършване на kill командата с подходящо съобщение.