Обмен технологиями

[Linux][Shell][Переменные оболочки] подробно объяснены

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


1. Локальные переменные

  • Определите переменные оболочки, имена переменных добавлять не нужно.$
  • локальные переменныеДействует только в течение текущего срока службы оболочки пользователя.

2. Определение переменной

  • Требования к имени переменной: Состоит из букв, цифр и знаков подчеркивания. Может начинаться с букв или знаков подчеркивания.
  • Имена переменных строго чувствительны к регистру.

3. Получите значение переменной

  • апостроф: Что видите, то и получаете, сильная цитата.
  • Двойные кавычки: вывод всего содержимого в кавычках, определение специальных символов и слабых ссылок.
  • Нет кавычек: Непрерывные символы могут быть без кавычек. Если есть пробелы, будет неоднозначность. Лучше всего использовать двойные кавычки.
  • обратный апостроф: Ссылается на результат выполнения команды, равный$()Применение

4.Специальные переменные

  • Специальные переменные оболочки, используемые в скриптах и ​​функциях для передачи параметров.

  • Существуют следующие специальные переменные позиционных параметров:

    переменнаяэффект
    $0Получите имя файла сценария оболочки и путь к нему.
    $nПолучите n-й параметр сценария оболочки. n находится в диапазоне от 1 до 9. Если оно больше 9, некоторые из них.{},нравиться{$10}
    $#Получите общее количество параметров выполненного сценария оболочки.
    $*Получить все параметры сценария оболочки без кавычек, это эквивалентно$@Функция плюс кавычки «$*» равнаПолучает все параметры в виде одной строки
    $@Без кавычек эффект тот же, что и выше. С кавычками — тот же.Получите все параметры как независимые строки

5.Специальные переменные состояния

  • Метод поискаman bash,поискSpecial Parameters

    переменнаяэффект
    $?Возвращаемое значение статуса выполнения последней команды: 0 — правильно, значение, отличное от 0, — неудачно.
    $$Номер процесса текущего сценария оболочки
    $!PID последнего фонового процесса
    $_Получить последний параметр последней команды

6. Команды встроенных переменных оболочки

1.эхо

  • параметр
    • -n: Вывод содержимого без разрывов строк.
    • -e: Интерпретация escape-символов.
      • n: новая линия
      • r: Входить
      • t:вкладка
      • b:backspace
      • v: вертикальный символ табуляции.

2.оценка

  • Функция:Выполнить несколько команд
  • Примерeval ls; cd ~

3.exec

  • Функция: не создавать дочерний процесс и не выполнять последующие команды.execПосле выполнения автоматическиexit

7. Перехват строки

  • грамматика

    грамматикаэффект
    #Удалить самое короткое совпадение с начала
    ##Удалить самое длинное совпадение с начала
    %Удалить самое короткое совпадение с конца
    %%Удалить самую длинную спичку с конца
    #Перехват указанного символьного содержимого
    a*cСоответствует строке, начинающейся с любого количества символов в середине и заканчивающейся буквой c.
    ${变量}Возвращаемое значение переменной
    ${#变量}Возвращаемая переменная длина, длина символа
    ${变量:start}Возвращает символ после значения смещения переменной
    ${变量:start:length}Извлечение символов, ограниченных длиной после смещения
    ${变量#word}С начала переменной удалите самую короткую подстроку совпадающего слова.
    ${变量##word}С начала переменной удалите самое длинное подходящее слово.
    ${变量%word}Удалите самую короткую подстроку совпадающего слова из конца переменной.
    ${变量%%word}Удалите самую длинную подстроку совпадающего слова из конца переменной.
    ${变量/pattern/string}Замените первый соответствующий шаблон строкой
    ${变量//pattern/string}Заменить все шаблоны строкой
  • Пример операции: Удалить имя файла

    # 通过⼦串的替换⽅式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg
    
    # 变量的⼦串功能,去掉后缀
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg
    
    # 利⽤变量的反引⽤替换⽂件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`
    
    # 剩下的⽂件,利⽤循环操作
    # 找出剩下所有需要替换的jpg⽂件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg
    
    # 写shell循环代码,循环操作
    # 去掉所有jpg⽂件的_finished后缀
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;done
    
    snowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

8. Специальная обработка переменных расширения оболочки.

1. Грамматика

  • Функция: Все эти четыре расширенные переменные относятся к оценке и обработке значений переменных.
  • грамматикаparameter,参数,范围
    • ${parameter:-word}:еслиparameterЗначение переменной пусто, вернитеwordнить
    • ${parameter:=word}:еслиparameterЗначение переменной пусто, тогдаwordЗаменяет значение переменной и возвращает ее значение
    • ${parameter:?word}:еслиparameterЗначение переменной пусто,wordкакstderrВыход, в противном случае значение выходной переменной
      • Используется для возврата сообщения об ошибке, когда возникает ошибка из-за установки пустой переменной.
    • ${parameter:+word}:еслиparameterЕсли значение переменной пусто, ничего не делайте, иначеwordвозвращаться

2. Сценарии применения

  • Резервное копирование данных, скрипт для удаления просроченных данных
    # 原脚本命令,有bug,有歧义
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    # 修正后的脚本命令
    # 如果有bug起义,就在当前目录搜索并执行删除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6