Skip to content

Latest commit

 

History

History
133 lines (80 loc) · 7.05 KB

README.md

File metadata and controls

133 lines (80 loc) · 7.05 KB

Променливи - дефиниране, инициализиране, присвояване. Системни променливи. Profiles.

Имената на променливите в bash се състоят от букви, цифри и "_" като не могат да започват с цифра. Типът на една променлива е символен низ, затова декларирането й не е задължително (стойността е празен низ).

Присвояване на стойност на променлива

  • чрез оператора за присвояване променлива=[стойност]

    Пример:

      num=12345
      str=hello
      long_str="hello world"
    

    От миналия път:

    Ако симолния низ е заграден с двойни кавички (" ") то то се показват всички метасимволи без `, $ и \

    Ако символния низ е заграден от единични кавички (' ') то то се показват всички метасимволи без \

  • чрез командата read: `read [име/на на променлива/и] Чете се един ред от стандартния вход и се разделя на думи (разделителя е интервал) като всяка дума се съпоставя на съответната променлива.

Извеждане на стойност на променлива

Извеждането на стойността на променливата става като поставим символа "$" пред нея.

Примери:

x=123
echo $x
name="Pesho"
echo "My name is $name"

Команди за променливи

  • echo

  • set - показва всички дефинирани променливи и техните стойноти

  • unset променлива1 ... - изключва дадена променлива от обкръжението на процеса

  • export променлива1 ... - указаните променливи стават видими за процесите-деца (процесите, породени от текущия процес)

Аритметични изчисления

Осъществяват се чрез командата expr

Какво прави expr? Изчислява се значението на подадения целочислен израз и резултатът се извежда на стандартния изход. Изразът се конструира цели числа, променливи и целочислените аритметични операции: +, -, *, /, %.

Примери:

expr 2 + 1 //stdout 3
x=5
expr $x - 1 //stdout 4
expr $x * 2 // stdout ???
expr $x \ 2 // stdout ???

Можем да присвояваме резултата към променливи

result=`expr 5+1`
broi=$(expr $(ls -l | wc -l)  - 1)

Работа със символни низове

  • expr length низ - дава ни дължината на низа

  • expr index низ символи - дава ни позицията на първото срещане на някои от символите, които сме указали

  • expr substr низ нач.позиция n - извлича n на брой символа от дадения низ, започващ от нач.позиция

Системни променливи

По-важни променливи:

  • HOME - aбсолютният път към личната директория на потребителя

  • PATH - списъкът на директориите, където се търсят командите

  • PS1 - първичен промпт

  • PS2 - вторичен промпт

  • USER - името на текущия потребител

  • SHELL - абсолютният път на използвания команден интерпретатор

Как да видим всички системни променливи? printenv

Как да си дефинираме системна променлива? export VARNAME=value

Command Substitution

Позволява изхода на командата да замени самата команда. За да задействаме субституцията използваме `command` или $(command)

Примери:

path=`pwd` или path=$(pwd)
name=`whoami` или name=$(whoami)
count=`who | wc -l` или count=$(who | wc -l)

Могат да бъдат и вложени

num=$(ps aux | grep $(whoami) | wc -l)

WTF moment

s=123
echo "hello $( s=world; echo "$s" )"
echo "$s"

Инициализиращи командни процедури (profiles)

Тези процедури се изпълняват автоматично при стартиран shell. Има няколко инициализиращи командни процедури, изпълняващи се от няколко вида shells:

  • Profiles за login shell процес

      • /etc/profile

      Глобален profile. Изпълнява се първи, ако съществува.

    • След това се изпълнява ~/.bash_profile или ~/.bash_login или ~/.profile - настройва се сесията на потребителя, стартирал логин процеса

  • Profiles за интерактивен не-login shell процес

    • изпълнява се ~/.bashrc

Задачи

  1. Прочетете от стандартния вход два файла. Запишете в първия файл потребителските имена на всички активни потребители, които са разрешили съобщенията. Намерете размера на втория файл, умножете го по 2 и резултата запишете в първия файл без да изтривате съдържанието му.

  2. Намерете дължината на низа "Hello world!". Намерете позицията на първия символ "о", който се среща в първия низ. Съберете двете числа и ги изведете с подходящо съобщение.

  3. Премахнете Hello (и интервала след него) от стринга "Hello from the other side". След това извлечете дължината на получения низ. Запишете N-тия ред (където N е дължината на получения низ) от /etc/passwd файла във файла NthLine.

  4. От списъка с активни потребители извлечете информацията за последния потребител. Изпратете му Hello world като укажете и логическия терминал.