Основы программирования оболочки Linux!

задняя часть Linux
Основы программирования оболочки Linux!

Это 10-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления

Введение

Shell это программа, написанная на языке C, которую использует пользовательLinux мост.Shell Это одновременно командный язык и язык программирования.Shell Относится к приложению, предоставляющему интерфейс, через который пользователи получают доступ к службам ядра операционной системы. в то же время,Bash также большинствоLinux системные установки по умолчаниюShell.

Основное использование

Способ исполнения исполняемого файла, обратите внимание на начало файла#!/bin/bash

перенаправление вывода

символ инструкция
Команда> файл Сохраните правильный вывод команды в файле, перезаписав
команда >> файл Добавить правильный вывод команды в файл
Команда 2> файл Сохраните сообщение об ошибке, выводимое командой, в файл, перезаписав
Команда 2>> файл Сохраните информацию об ошибке, выводимую командой, в файл в порядке добавления
команда &> файл Сохраните всю информацию в одном файле, перезаписав
команда &>> файл Добавить всю информацию в один файл
Команда > Файл 2>&1 Сохраните всю информацию в одном файле, перезаписав
команда >> файл 2>&1 Добавить всю информацию в один файл
команда >> файл1 2 >> файл2 Добавить правильную информацию в файл 1 и информацию об ошибках в файл 2
ll > file  把ll命令正确的输出结果保存在file文件中
ll >> file  把ll命令正确的输出结果追加在file文件的最后
ll &>> file 把ll命令执行的所有结果追加在file文件的最后
ll &>> /dev/null 把ll命令的结果都舍弃 /dev/null相当于一个黑洞

перенаправление ввода

Подсчитайте количество символов в файле, то есть количество строк, слов и байтов.

wc < file

Выполнять несколько команд последовательно

Формат инструкция
команда 1 команда 2 Несколько команд выполняются последовательно, и между командами нет корреляции
Команда1 && Команда2 Команда 1 выполнена правильно, команда 2 будет выполнена
Command1 || Command2. Команда 1 выполнена неправильно, команда 2 будет выполнена
Команда 1 | Команда 2 Корректное выполнение команды 1 как объекта операции команды 2
cd / ; ll #进入根路径再执行ll
make && make install #只有make正确执行,才会执行make install
cd /test || echo 'not find'
ll | grep test

Общие символы

подстановочный знак инструкция
? соответствует произвольному символу
* соответствовать чему угодно
[] Соответствует любому символу в скобках Например: [a, b], соответствует одному из символов a или b
[-] Совпадение с символом в диапазоне Например: [a-z], совпадение с одним из символов от a до z
[^] Совпадение с символом без квадратных скобок Например: [^0-9], совпадение с символом, отличным от 0 до 9
rm -rf /*  删除所有文件 跑路必备
find -name *.rc? 
символ инструкция
' ' Специальные символы в одинарных кавычках в одинарных кавычках особого значения не имеют
" " Двойные кавычки Специальные символы в двойных кавычках имеют особое значение
`` Обратные кавычки используются для выполнения системных команд.
$() Также используется для выполнения системных команд
$ переменная вызова
# Примечания
\ escape-символ
x=1
echo '$x'  没有特殊意义
#$x 
echo "$x"  拥有特殊意义
#1

time = `date` 执行系统命令
time = $(date) 同样是执行系统命令
echo time 输出对应时间

Чтение считывает значение, введенное с клавиатуры.

commad Command Считывает значение переменной с клавиатуры, а затем сохраняется в указанной переменной, часто используется в сценариях оболочки для взаимодействия с пользователем по случаю.

опции инструкция
-p Задает текст подсказки при чтении значения
-t Указывает время (в секундах) ожидания при чтении значения
-n Установите количество символов для ввода
-s Скрытая входная информация
#!/bin/bash
read -p "输入密码:" -s pwd
echo $pwd

Числовые операции

можно использовать$(())или$[]выполнять числовые операции

sum=$(($1+$2))
sum=$[$1+$2]

замена переменной

замена переменной переменная у не задана Переменная Y пустая переменная y заданное значение
x=${y-новое значение} х = новое значение х пуст x=$y
х=${у:-новое значение} х = новое значение х = новое значение x=$y
х=${у+новое значение} х пуст х = новое значение х = новое значение
х=${у:+новое значение} х пуст х пуст х = новое значение
х=${у=новое значение} х = новое значение х пуст x=$y
у = новое значение у значение не меняется Значение у не меняется
х = $ {у: = новое значение} х = новое значение Х= новое значение x=$y
у = новое значение у = новое значение Значение у не меняется
х=${у? новое значение} Новое значение выводится в stderr (экран) х пуст x=$y
х=${у:?новое значение} Новое значение выводится в stderr Новое значение выводится в stderr x=$y

Переменная

переменная по умолчанию

Переменная значение
$0 текущее имя скрипта
$1 Первый параметр, полученный скриптом
$2 Второй параметр, полученный скриптом
$# Количество всех параметров, полученных скриптом
$@ Все параметры, полученные скриптом
$* Все параметры скрипта получили все переменные целиком
$? Статус выполнения предыдущей командной строки
$$ Отображает идентификатор текущего процесса
$! Отображение последнего номера процесса в фоновом режиме
bash test.sh a b c d  #bash执行文件
$0 ==>  default_var.sh
$1 ==>  a
$2 ==>  b
$# ==>  4
$@ ==>  a b c d
$* ==>  a b c d
$? ==>  0 #0代表正常执行

локальная переменная

Локальные переменные определяются в сценариях или командах и действуют только в текущем экземпляре оболочки.Программы, запущенные другими оболочками, не могут получить доступ к локальным переменным. Переменная вызова должна быть добавлена ​​с символом $.Обратите внимание, что вокруг знака равенства не может быть пробелов.

x=1
readonly x  定义只读变量
echo $x  #1
set 查看所有变量
unset 删除变量

переменная среды

все программы, включаяshellЗапущенные программы могут обращаться к переменным среды, а некоторым программам требуются переменные среды для обеспечения их нормальной работы. когда необходимоshellСценарии также могут определять переменные среды. Как правило, переменные окружения пишутся с заглавной буквы, чтобы их было легко различить. переменные среды, такие какPATH,HOMEЖдать. обычно в/etc/profile, вам нужно использовать его после установкиsource /etc/profileПеременные среды, которые должны вступить в силу

export NAME=test 定义环境变量
env 查看环境变量
echo $PATH  查看环境变量
echo $HOME

declare объявляет тип переменной

опции инструкция
- Свойства, которые можно использовать для указания переменных
+ Отменить свойство, заданное переменной
-i установить переменную в целое число
-x Указанная переменная станет переменной среды и может использоваться программами, отличными от оболочки.
-p Отображает объявленный тип указанной переменной
declare - i sum=$1+$2

Базовая грамматика

эхо-вывод на печать

echo test 直接打印出test
echo test > file 将打印内容写入文件

печать в формате printf

суррогат формата инструкция
%ns N выходная строка
%ni вывести n чисел
%m.nf Выходное число с плавающей запятой Указывает количество целых цифр и десятичных цифр вывода.Например, %8.2f означает, что всего выводится 8 цифр, из которых 2 цифры являются десятичными и 6 цифр являются целыми числами.
последовательность инструкция
\a подать предупреждающий сигнал
\b назад
\f подача страницы
\n новая линия
\r Возврат каретки
\t горизонтальная вкладка
\v вертикальная вкладка
printf %s abcdef
#abcdef
printf "%s %s %s\n" a b c d e f g h i j
#a b c
#d e f

Отрежьте колонну извлечения

опции инструкция
-f Обрезать указанный столбец
-d -d: указывает разделитель полей, разделитель полей по умолчанию — «TAB»;
cut -d ':' -f 1 /etc/passwd #以:为分隔截取第一列

оценка условий испытаний

опции инструкция
-e Проверьте, существует ли файл
-d Если файл является каталогом, правда
-f true, если файл является обычным файлом
-L Определить, существует ли файл и должен ли он быть связанным файлом
-z Проверить, пуста ли переменная
-a множественные суждения
-r Проверить, есть ли у файла разрешение на чтение
-w Судействуя, имеет ли файл разрешение на запись
-x Определить, есть ли у файла разрешение на выполнение
test -f file #判断文件是否为普通文件
[ -f file ] #另一种写法
echo $?  #查看上一条命令执行状态,0为正常执行

[ -f file ] && echo "文件存在" || echo "文件不存在"
[ -z "$name" ] && echo "变量为空" || echo "变量不为空"
[ "$x" == "$y"] && echo "两个变量相等" || echo "两个变量不相等"
[ -f file -a -w file ] #判断是否为普通文件并且是否具有写权限

Контроль процесса

если суждение

if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
   exit 1 #设置程序出口,停止执行下面语句
fi

#另一种写法
if [ $a == $b ]; then

fi

случай множественный выбор решение

read -p "请输入数字" Num
case $Num in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

для петли

遍历数字
for num in 1 2 3
do
    echo "The value is: $num"
done

遍历字符串
for str in 'This is a string'
do
    echo $str
done

打印根目录所有文件
ls / > /root/file.log
for i in $(cat file.log)
do
echo $i
done

常规for循环
for ((i=0;i<10;i=i+1))
do
echo $i
done

пока цикл

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

до цикла

until Выполняйте серию команд до тех пор, пока не будет выполнено условие.true останавливаться.

untilпетля сwhileЦиклы обрабатываются прямо противоположным образом.

int=1
until(( $int>=5 ))
do
    echo $int
    let "int++"
done

Рекомендуемое чтение

Linux sudo и sudoers подробно!

Настройка и настройка параметров ядра Linux TCP (подробно)!

Эксплуатация и обслуживание должны знать Linux RAID Detailed!

Управление службами Linux (подробно)!

Платформа проникновения Metasploit, которую должен знать каждый специалист по сетевой безопасности!

Основы проникновения — использование общих модулей Metasploit

Руководство по серверному оборудованию!