BashMaster
8.24K subscribers
683 photos
14 videos
1 file
706 links
Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов.

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Переменные среды

Иногда в командах оболочки нужно работать с некими системными данными. Вот, например, как вывести домашнюю директорию текущего пользователя

Обратите внимание на то, что мы можем использовать системную переменную $HOME в двойных кавычках, это не помешает системе её распознать.

echo "Home for the current user is: $HOME"
Уроки Linux для начинающих / Изучение Linux Ubuntu и Bash с нуля

В этом плейлисте вы научитесь устанавливать VirtualBox с Ubuntu, изучите основы пользовательского интерфейса и командной строки Linux, научитесь работать с файлами и директориями, изучите пакетный менеджер, работу с памятью, сжатие файлов и редакторы текста, разберёте команды поиска FIND и GREP.

📹 Плейлист YouTube

Если вы уже имеете эти навыки и знания, поделитесь ими со своими друзьями ;)
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Установка разрешений для файла сценария

Сохранив файл bash-скрипта, необходимо сделать этот файл исполняемым, иначе, попытавшись его запустить, вы столкнётесь с ошибкой Permission denied.

chmod +x ./myscript
./myscript
Пользовательские переменные

Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.

Как и в случае с системными переменными, к пользовательским переменным можно обращаться, используя знак доллара:

grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"
Подстановка команд

Bash-скрипты позволяют извлекать информацию из вывода команд и сохранять её в переменных для дальнейшего использования.

Сделать это можно двумя способами:

• С помощью значка обратного апострофа «`»
• С помощью конструкции $()

mydir=$(pwd)
echo $mydir
Сравнение чисел

В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.

n1 -eq n2 Возвращает истинное значение, если n1 равно n2.
n1 -ge n2 Возвращает истинное значение, если n1 больше или равно n2.
n1 -gt n2 Возвращает истинное значение, если n1 больше n2.
n1 -le n2 Возвращает истинное значение, если n1 меньше или равно n2.
n1 -lt n2 Возвращает истинное значение, если n1 меньше n2.
n1 -ne n2 Возвращает истинное значение, если n1 не равно n2.

val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi
Управляющая конструкция if-then

Управление потоком исполнения команд может быть достигнуто с помощью конструкции if-then. Например, можно использовать ее для поиска пользователя в /etc/passwd и, в случае успешного нахождения, вывести сообщение о его существовании.

user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi
Математические операции

Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b))

var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2
Проверки файлов

-d file Проверяет, существует ли файл, и является ли он директорией.
-e file Проверяет, существует ли файл.
-f file Проверяет, существует ли файл, и является ли он файлом.
-r file Проверяет, существует ли файл, и доступен ли он для чтения.
-s file Проверяет, существует ли файл, и не является ли он пустым.
-w file Проверяет, существует ли файл, и доступен ли он для записи.
-x file Проверяет, существует ли файл, и является ли он исполняемым.
file1 -nt file2 Проверяет, новее ли file1, чем file2.
file1 -ot file2 Проверяет, старше ли file1, чем file2.
-O file Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.
-G file Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.

if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi
Сравнение строк

str1 = str2 Проверяет строки на равенство, возвращает истину, если строки идентичны.
str1 != str2 Возвращает истину, если строки не идентичны.
str1 < str2 Возвращает истину, если str1 меньше, чем str2.
str1 > str2 Возвращает истину, если str1 больше, чем str2.
-n str1 Возвращает истину, если длина str1 больше нуля.
-z str1 Возвращает истину, если длина str1 равна нулю.

user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged in user"
fi
Обход файлов, содержащихся в директории

Один из самых распространённых вариантов использования циклов for в bash-скриптах заключается в обходе файлов, находящихся в некоей директории, и в обработке этих файлов.

Например, вот как можно вывести список файлов и папок:

for file in /home/likegeeks/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
Перебор простых значений

Пожалуй, самый простой пример цикла for в bash-скриптах — это перебор списка простых значений.

Хорошо видно, что в переменную $var последовательно попадают элементы из списка. Происходит так до тех пор, пока цикл не дойдёт до последнего из них.

for var in first second third fourth fifth
do
echo The $var item
done
Перебор сложных значений

В списке, использованном при инициализации цикла for, могут содержаться не только простые строки, состоящие из одного слова, но и целые фразы, в которые входят несколько слов и знаков препинания.

for var in first "the second" "the third" "I’ll do it"
do
echo "This is: $var"
done
Циклы for

Циклы for в оболочке bash позволяют перебирать последовательности значений. Они имеют следующую структуру:

for var in list
do
команды
done

В каждой итерации цикла значение из списка присваивается переменной var. Цикл выполняется для каждого элемента списка по порядку.
Циклы for в стиле C

В bash-скриптах можно использовать циклы for, описание которых выглядит очень похожим на циклы в стиле C, правда, без некоторых отличий тут не обошлось.

for (( i=1; i <= 10; i++ ))
do
echo "number is $i"
done
Цикл while

В цикле можно проверять условие и выполнять тело цикла, пока условие возвращает ноль. Когда условие вернет ненулевое значение, цикл остановится.

var1=5
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 - 1 ]
done
Посты про инфобезопасность в нашем отдельном канале:
https://t.me/+J34Lc_hJnb02ZmRi
Вложенные циклы

В теле цикла можно использовать любые команды, в том числе — запускать другие циклы. Такие конструкции называют вложенными циклами.

for (( a = 1; a <= 3; a++ ))
do
echo "Start $a:"
for (( b = 1; b <= 3; b++ ))
do
echo " Inner loop: $b"
done
done
Обработка содержимого файла

Чаще всего вложенные циклы используют для обработки файлов. Так, внешний цикл занимается перебором строк файла, а внутренний уже работает с каждой строкой.

Такой подход можно использовать при обработке файлов формата CSV, или любых подобных файлов, записывая, по мере надобности, в переменную окружения IFS символ-разделитель.

IFS=$'\n'
for entry in $(cat /etc/passwd)
do
echo "Values in $entry –"
IFS=:
for value in $entry
do
echo " $value"
done
done
Базовая шпаргалка по Bash (CLI)

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
GooFuzz

Это скрипт, написанный на Bash Scripting , который использует расширенные методы поиска Google для получения конфиденциальной информации в файлах или каталогах без отправки запросов к веб-серверу.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM