Sobes.tech
Middle

Bash'ta колдонуучу каталарын кантип иштетесиң?

sobes.tech AI

AIден жооп

bash-да колдонуучулардын каталары негизинен төмөнкүдөй жолдор менен иштелип чыгат:

  • Чыгуу коддору: Ар бир команда аяктоо кодун кайтарат (exit status). 0 адатта ийгиликке ишарат кылат, башка маанилер — ката:
  • Шарттуу конструкциялар: if, elif, else чыгуу коддорун текшерүү үчүн колдонулат:
  • Логикалык операторлор: && (жана), || (же) командалардын ийгиликке же катага жараша иштешин камсыз кылат:
  • Чыгуу багыттоолору: > (stdout), 2> (stderr), &> (stdout жана stderr):
  • Тармактар (traps): сигнал алганда же скрипт аяктаганда команда иштетүүгө мүмкүндүк берет:

Мисалдар:

#!/bin/bash

# Чыгуу кодун текшерүү
if ! command_that_might_fail; then
  echo "Команданы аткарууда ката!" >&2 # stderrге багыттоо
  exit 1 # скриптти ката менен аяктоо
fi

# Логикалык оператор &&
command_successful && echo "Команда ийгиликтүү аткарылды" || echo "Команда ката менен аяктады"

# SIGINT (Ctrl+C) үчүн ловушка
trap 'echo "Билдирүү сигнал алынды. Чыгуу..."; exit 1' SIGINT

# Каталар жана билдирүү чыгарууларын багыттоо
if command_with_errors 2> error.log; then
  echo "Команда катасыз аткарылды"
else
  echo "Каталар табылды. Толугураак маалыматтар error.logда"
fi

Скрипттердин ишенимдүүлүгүн жогорулатуу үчүн:

  • set -e: Ар бир ийгиликсиз командадан кийин скрипт токтойт (эгер ал if жана while текшерүүлөрүнөн башка болсо).
  • set -u: Өзгөрмөлөр алдын ала аныкталышы керек.
  • set -o pipefail: Каналдын чыгуу коду акыркы катасы бар командага айланат:
#!/bin/bash

set -euo pipefail

# Бул скрипт "undefined_var" орнотулбаса аяктайт
echo "$undefined_var"

# Бул скрипт "failing_command" нөл эмес чыгуу коду кайтарса аяктайт
failing_command

Функциялар жана аргументтерди колдонуу:

#!/bin/bash

# Аргументтерди текшерүүчү функция
validate_args() {
  if [ $# -ne 2 ]; then
    echo "Колдонуу: $0 <аргумент1> <аргумент2>" >&2
    exit 1
  fi
}

validate_args "$@"