Имената на променливите в 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` или $(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"
Тези процедури се изпълняват автоматично при стартиран shell. Има няколко инициализиращи командни процедури, изпълняващи се от няколко вида shells:
-
Profiles за login shell процес
-
- /etc/profile
Глобален profile. Изпълнява се първи, ако съществува.
-
След това се изпълнява ~/.bash_profile или ~/.bash_login или ~/.profile - настройва се сесията на потребителя, стартирал логин процеса
-
-
Profiles за интерактивен не-login shell процес
- изпълнява се ~/.bashrc
-
Прочетете от стандартния вход два файла. Запишете в първия файл потребителските имена на всички активни потребители, които са разрешили съобщенията. Намерете размера на втория файл, умножете го по 2 и резултата запишете в първия файл без да изтривате съдържанието му.
-
Намерете дължината на низа "Hello world!". Намерете позицията на първия символ "о", който се среща в първия низ. Съберете двете числа и ги изведете с подходящо съобщение.
-
Премахнете Hello (и интервала след него) от стринга "Hello from the other side". След това извлечете дължината на получения низ. Запишете N-тия ред (където N е дължината на получения низ) от /etc/passwd файла във файла NthLine.
-
От списъка с активни потребители извлечете информацията за последния потребител. Изпратете му Hello world като укажете и логическия терминал.