Bash for Oracle DBAs قسمت دوم بررسی فایل و دایرکتوری

در مقاله قبل با ساختار if و مفهوم test، [ ] و [[ ]] آشنا شدیم.

Bash for Oracle DBAs قسمت اول شرط‌ ها در Bash if، test

گفتیم که Bash می‌تواند قبل از اجرای یک دستور، شرایط مختلفی را بررسی کند.

یکی از مهم‌ترین کاربردهای این قابلیت در اسکریپت‌های مدیریتی Linux، بررسی وضعیت فایل‌ها و دایرکتوری‌ها است.

یک DBA یا sysadmin معمولاً باید قبل از اجرای عملیات مهم موارد زیر را بررسی کند:

  • آیا فایل پیکربندی وجود دارد؟
  • آیا دایرکتوری backup ساخته شده است؟
  • آیا یک اسکریپت قابل اجرا است؟
  • آیا فایل قابل خواندن یا نوشتن است؟

در Bash برای این کارها مجموعه‌ای از File Tests وجود دارد.

 


File Tests در Bash

File Tests مجموعه‌ای از گزینه‌ها هستند که با دستور test یا [ ] و [[ ]] استفاده می‌شوند تا وضعیت فایل‌ها را بررسی کنند.

ساختار کلی:

if [[ condition ]]; then
   commands
fi

مثال:

if [[ -f /etc/passwd ]]; then
   echo "File exists"
fi

بررسی وجود فایل

برای بررسی اینکه یک فایل وجود دارد از -f استفاده می‌کنیم.

FILE="/etc/oracle.conf"

if [[ -f "$FILE" ]]; then
  echo "Config file exists"
else
  echo "Config file not found"
fi

توضیح:

-f

بررسی می‌کند که مسیر داده شده:

  • وجود داشته باشد
  • و یک فایل معمولی (regular file) باشد

بررسی وجود دایرکتوری

برای بررسی دایرکتوری از -d استفاده می‌کنیم.

BACKUP_DIR="/u01/backups"

if [[ -d "$BACKUP_DIR" ]]; then
  echo "Backup directory exists"
else
  echo "Backup directory missing"
fi

اگر دایرکتوری وجود نداشته باشد می‌توانیم آن را ایجاد کنیم.

if [[ ! -d "$BACKUP_DIR" ]]; then
  mkdir -p "$BACKUP_DIR"
fi

گزینه -p باعث می‌شود اگر مسیرهای میانی وجود نداشتند نیز ساخته شوند.


بررسی قابل اجرا بودن فایل

گاهی لازم است قبل از اجرای یک اسکریپت بررسی کنیم که فایل executable است.

SCRIPT="/opt/scripts/backup.sh"

if [[ -x "$SCRIPT" ]]; then
  echo "Script is executable"
else
  echo "Script cannot be executed"
fi

آپشن

-x

بررسی می‌کند آیا فایل اجازه اجرا دارد یا نه.


بررسی قابل خواندن بودن فایل

اگر اسکریپت شما قرار است فایلی را بخواند، بهتر است ابتدا بررسی کند که فایل readable است.

FILE="/etc/passwd"

if [[ -r "$FILE" ]]; then
  echo "File is readable"
fi

آپشن

-r

یعنی فایل قابل خواندن است.


بررسی قابل نوشتن بودن فایل

LOGFILE="/var/log/dbcheck.log"

if [[ -w "$LOGFILE" ]]; then
  echo "Log file is writable"
fi

آپشن 

-w

یعنی امکان نوشتن در فایل وجود دارد.


بررسی خالی نبودن فایل

گاهی لازم است بدانیم یک فایل واقعاً داده دارد یا نه.

برای این کار از -s استفاده می‌کنیم.

FILE="/var/log/messages"

if [[ -s "$FILE" ]]; then
  echo "File contains data"
else
  echo "File is empty"
fi

آپشن

-s

یعنی فایل وجود دارد و اندازه آن بیشتر از صفر است.


ترکیب چند شرط

می‌توان چند شرط را با هم ترکیب کرد.

مثال

بررسی کنیم فایل وجود دارد و قابل خواندن است.

FILE="/etc/passwd"

if [[ -f "$FILE" && -r "$FILE" ]]; then
  echo "File exists and is readable"
fi

در اینجا:

&&

به معنی AND است.

یعنی هر دو شرط باید برقرار باشند.


بررسی نبودن فایل

برای نقیض کردن شرط از ! استفاده می‌کنیم.

FILE="/tmp/test.txt"

if [[ ! -f "$FILE" ]]; then
  echo "File does not exist"
fi

مثال عملی برای DBAها

فرض کنید اسکریپتی دارید که قرار است backup بگیرد.

قبل از شروع باید مطمئن شویم دایرکتوری backup وجود دارد.

BACKUP_DIR="/u01/backup"

if [[ ! -d "$BACKUP_DIR" ]]; then
  echo "Backup directory not found. Creating it..."
  mkdir -p "$BACKUP_DIR"
fi

این الگو در بسیاری از اسکریپت‌های automation استفاده می‌شود.


چند File Test پرکاربرد

پرکاربردترین تست‌ها در Bash عبارتند از:

گزینه معنی
-f فایل معمولی وجود دارد
-d دایرکتوری وجود دارد
-x فایل قابل اجراست
-r فایل قابل خواندن است
-w فایل قابل نوشتن است
-s فایل خالی نیست

این‌ها همان تست‌هایی هستند که در اکثر اسکریپت‌های مدیریتی Linux استفاده می‌شوند.


اشتباه رایج

یکی از خطاهای رایج در Bash این است که متغیرها بدون کوتیشن استفاده شوند.

❌ اشتباه

if [[ -f $FILE ]]; then

✅ درست

if [[ -f "$FILE" ]]; then

تمرین

یک اسکریپت بنویسید که:

  1. بررسی کند /u01/app/oracle وجود دارد
  2. اگر وجود نداشت آن را ایجاد کند
  3. بررسی کند فایل /etc/passwd قابل خواندن است

جمع‌بندی

در این مقاله با مهم‌ترین File Tests در Bash آشنا شدیم:

  • -f بررسی وجود فایل
  • -d بررسی وجود دایرکتوری
  • -x بررسی executable بودن
  • -r بررسی read permission
  • -w بررسی write permission
  • -s بررسی خالی نبودن فایل

این تست‌ها پایه بسیاری از اسکریپت‌های مدیریتی در Linux هستند و تقریباً در تمام اسکریپت‌های automation استفاده می‌شوند.

در قسمت بعد به سراغ 

Bash for Oracle DBAs قسمت سوم حلقه‌ها در Bash

می رویم