Foto User
Sistem Manajemen Bank menggunakan bash dan crontab

Muhammad Daffa Musaffa

Sosial Media


0 orang menyukai ini
Suka

Summary

Pada sistem ini, Bank Daffa menjadi simulasi layanan keuangan sederhana yang dibangun menggunakan bahasa shell scripting di lingkungan Ubuntu. Tujuan utamanya adalah memberikan gambaran praktis bagaimana manajemen data keuangandapat dikelola secara otomatis hanya dengan bantuan skrip. Antarmuka yang disediakan bersifat interaktif berbasis menu, memungkinkan pengguna memilih opsi transaksi melalui terminal, sistem ini juga mencegah pengguna mentransfer ke dirinya sendiri dan memastikan saldo mencukupi sebelum transaksi terjadi. Sistem ini menunjukkan bagaimana otomatisasi sederhana dapat diterapkan pada simulasi keuangan tanpa menggunakan database atau aplikasi besar. Semua berjalan ringan, transparan, dan mudah dimodifikasi, menjadikannya sangat cocok untuk kebutuhan pembelajaran atau sistem berbasis lokal yang tidak memerlukan keamanan tingkat tinggi.

Description

Di era digital saat ini, pengelolaan data keuangan secara otomatis menjadi kebutuhan penting, baik dalam skala individu, organisasi, maupun lembaga keuangan. Sistem perbankan modern umumnya memanfaatkan database dan antarmuka grafis untuk menangani berbagai transaksi seperti penyimpanan, penarikan, dan transfer dana antar pengguna. Namun, tidak semua kebutuhan memerlukan sistem yang kompleks. Dalam konteks pembelajaran atau penerapan lokal, sistem sederhana berbasis terminal dapat menjadi solusi praktis, efisien, dan edukatif.

Berdasarkan kebutuhan tersebut, dibangunlah sistem manajemen bank berbasis Bash pada lingkungan Linux/Ubuntu. Sistem ini bertujuan untuk mensimulasikan fungsi dasar perbankan seperti deposit, withdraw, transfer, serta pelacakan riwayat transaksi, dengan pendekatan berbasis file dan skrip shell. Setiap pengguna memiliki file saldo tersendiri, dan seluruh aktivitas dicatat secara kronologis dalam log file global.

Sistem ini juga mengimplementasikan otomatisasi harian menggunakan crontab, di mana setiap pengguna akan mendapatkan ringkasan transaksi hariannya secara terpisah. Pendekatan ini tidak hanya melatih kemampuan scripting dan pengelolaan berkas di sistem Linux, tetapi juga menunjukkan bagaimana manajemen data dapat dilakukan tanpa perlu database atau perangkat lunak kompleks.

Dengan memanfaatkan tools sederhana yang tersedia secara default di sistem Linux, sistem ini dapat dijalankan pada hampir semua komputer tanpa memerlukan konfigurasi tambahan. Hal ini menjadikannya relevan sebagai proyek edukatif dan latihan membangun sistem manajemen data keuangan skala kecil secara praktis dan efisien.

 

LANGKAH PENGERJAAN

  1. buat file bank.sh dan ikuti kode programnya

#!/bin/bash

Baris ini disebut shebang. Artinya:
Menandakan bahwa script ini dijalankan menggunakan interpreter Bash (Bourne Again Shell).
Wajib ada di baris pertama agar bisa dieksekusi sebagai program.

LOG_FILE="/home/$USER/log_bank.txt"

Variabel ini menyimpan lokasi file log transaksi:
$USER otomatis mengambil nama user Linux yang sedang aktif.
Semua transaksi akan dicatat di file ini untuk keperluan riwayat.

get_saldo_file() {
 echo "/home/$USER/saldo_1.txt"
}

Fungsi ini menerima 1 parameter (nama pengguna) dan mengembalikan path file saldo user tersebut:
Misalnya get_saldo_file "dina" → /home/username/saldo_dina.txt

init_saldo_file() {
 file=$(get_saldo_file "$1")
 [ ! -f "$file" ] && echo "0" > "$file"
}

Fungsi ini digunakan untuk membuat file saldo jika belum ada, dengan nilai awal Rp0:
Mengecek apakah file saldo_nama.txt sudah ada
Kalau belum, file tersebut akan dibuat dan diisi angka 0

menu() {
 clear
 echo "========================================"
 echo "               BANK DAFFA"
 ...
}
Fungsi ini adalah tampilan menu utama interaktif:
Membersihkan terminal (clear)
Menampilkan 6 pilihan utama:

1. Deposit uang
2. Withdraw uang
3. Lihat saldo/tabungan
4. Lihat riwayat transaksi
5. Transfer ke orang lain
6. Keluar program

 

2.  tambahkan syntax deposit

case $pilihan in 1)
Ini adalah percabangan berdasarkan pilihan yang dipilih oleh user dari menu utama. Angka 1 merujuk pada opsi "Deposit Uang".

echo "------ DEPOSIT ------"
Menampilkan heading agar pengguna tahu bahwa mereka sedang dalam proses deposit.

read -p "Masukkan nama Anda : " nama
Meminta input nama pengguna dan menyimpannya ke variabel nama.

init_saldo_file "$nama"
Memastikan file saldo untuk pengguna tersebut sudah dibuat.
Jika belum ada file saldo_nama.txt, maka akan dibuat dan diisi dengan nilai awal 0.

saldo_file=$(get_saldo_file "$nama")
Mendapatkan path lengkap file saldo dari nama pengguna.
Contoh hasilnya: /home/username/saldo_daffa.txt

read -p "Masukkan jumlah deposit : Rp" jumlah
Meminta input jumlah uang yang ingin disetor dan menyimpannya di variabel jumlah.


if [ "$jumlah" -lt 50000 ]; then
 echo "Minimal deposit adalah Rp50.000"
 return
fi
Jika user mencoba menyetor di bawah Rp50.000, transaksi dibatalkan.


saldo=$(<"$saldo_file")
saldo_baru=$((saldo + jumlah))
Membaca saldo saat ini dari file.
Menambahkan jumlah deposit untuk mendapatkan saldo baru.


echo "$saldo_baru" > "$saldo_file"
File saldo_nama.txt diperbarui dengan saldo terbaru.

echo "$(date '+%Y-%m-%d %H:%M:%S') - $nama melakukan DEPOSIT sebesar Rp$jumlah (Saldo: Rp$saldo_baru)" >> "$LOG_FILE"
Transaksi dicatat dengan timestamp.
Dicatat jenis transaksi, jumlah, dan saldo terbaru.


echo "Deposit berhasil. Saldo Anda sekarang: Rp$saldo_baru"
Menampilkan informasi kepada user bahwa deposit berhasil dilakukan.

 

3. tambahkan syntax withdraw

echo "------ WITHDRAW ------"
Menampilkan header agar pengguna tahu sedang berada di menu penarikan uang.

read -p "Masukkan nama Anda : " nama
Membaca nama pengguna dan menyimpannya dalam variabel nama.

init_saldo_file "$nama"
Memastikan file saldo pengguna (saldo_nama.txt) sudah ada.
Jika belum ada, akan dibuat dan diisi dengan 0.

saldo_file=$(get_saldo_file "$nama")
Mendapatkan path file saldo berdasarkan nama user, misalnya:
/home/username/saldo_daffa.txt

read -p "Masukkan jumlah withdraw : Rp" jumlah
Meminta pengguna untuk memasukkan jumlah uang yang ingin ditarik.

if [ "$jumlah" -lt 50000 ]; then
 echo "Minimal withdraw adalah Rp50.000"
 return
fi
Menolak transaksi jika nominal withdraw kurang dari Rp50.000.

saldo=$(<"$saldo_file")
if [ "$jumlah" -le "$saldo" ]; then
 saldo_baru=$((saldo - jumlah))
 ...
else
 echo "Gagal: Saldo tidak cukup!"
fi
Membaca saldo pengguna
Mengecek apakah saldo cukup untuk withdraw

Jika cukup:
Saldo dikurangi
File saldo diperbarui
Transaksi dicatat ke log
Pesan sukses ditampilkan

Jika tidak cukup:
Menampilkan pesan gagal karena saldo tidak mencukupi

echo "$(date '+%Y-%m-%d %H:%M:%S') - $nama melakukan WITHDRAW sebesar Rp$jumlah (Saldo: Rp$saldo_baru)" >> "$LOG_FILE"
Mencatat transaksi beserta waktu dan saldo setelah penarikan.

echo "Withdraw berhasil. Saldo Anda sekarang: Rp$saldo_baru"
Memberi tahu bahwa penarikan berhasil dan menampilkan saldo terbaru.

 

4. tambahkan syntax lihat tabungan

echo "------ CEK TABUNGAN ------"
Menampilkan heading agar pengguna tahu sedang dalam menu untuk mengecek saldo.

read -p "Masukkan nama Anda: " nama
Meminta input nama dari pengguna, disimpan dalam variabel nama.

init_saldo_file "$nama"
Memastikan file saldo pengguna (misalnya saldo_daffa.txt) sudah tersedia.
Jika belum ada, file akan dibuat dan diisi nilai awal 0.

saldo=$(<"$(get_saldo_file "$nama")")
Membaca isi dari file saldo dan menyimpannya ke dalam variabel saldo.
Contoh:
Jika file saldo_daffa.txt berisi 150000, maka variabel saldo=150000.

echo "Saldo atas nama $nama: Rp$saldo"
Menampilkan saldo saat ini kepada pengguna dalam format:
Saldo atas nama daffa: Rp150000
 

5. tambahkan syntax riwayat transaksi

echo "------ RIWAYAT TRANSAKSI ------"
Menampilkan heading menu agar pengguna tahu sedang membuka riwayat transaksi.

read -p "Masukkan nama Anda: " nama
Meminta input nama pengguna dan menyimpannya ke dalam variabel nama.

if grep -q "$nama melakukan|$nama mentransfer" "$LOG_FILE"
Mengecek apakah file log_bank.txt mengandung:
Transaksi dengan pola nama melakukan DEPOSIT/WITHDRAW
Transaksi dengan pola nama mentransfer ke ...

Jika tidak ditemukan, akan muncul pesan: Belum ada transaksi atas nama $nama.
Jika ditemukan, maka proses pencetakan riwayat dilanjutkan.


echo "Tanggal & Waktu | Jenis | Jumlah | Saldo Setelah | Keterangan"
Menampilkan format tampilan kolom agar riwayat transaksi mudah dibaca.

grep ... | while read -r line; do ... done
Membaca semua baris yang relevan dari log_bank.txt, lalu memproses satu per satu isi baris tersebut.

Pemrosesan baris log transaksi:
Jika jenisnya adalah melakukan (DEPOSIT atau WITHDRAW):
jenis=$(...)     # Ambil kata DEPOSIT atau WITHDRAW
jumlah=$(...)    # Ambil jumlah uang yang ditransaksikan
saldo=$(...)     # Ambil saldo akhir setelah transaksi

Lalu ditampilkan dalam format tabel:
[Tanggal] | [DEPOSIT/WITHDRAW] | RpXXX | RpYYY | -

Jika jenisnya adalah mentransfer:
jumlah=$(...)     # Ambil jumlah uang yang ditransfer
saldo=$(...)      # Saldo pengirim setelah transfer
tujuan=$(...)     # Nama penerima transfer

Ditampilkan dalam format:
[Tanggal] | TRANSFER | RpXXX | RpYYY | [Nama Penerima]

 

6. tambahkan syntax transfer

echo "------ TRANSFER ------"
Menampilkan heading agar pengguna tahu sedang berada dalam menu transfer.

read -p "Nama Pengirim      : " pengirim
read -p "Nama Penerima      : " penerima
read -p "Jumlah transfer Rp : " jumlah
Meminta nama pengirim, penerima, dan jumlah uang yang ingin ditransfer.

if [ "$pengirim" = "$penerima" ]; then
 echo "Transfer ke diri sendiri tidak diperbolehkan."
 return
fi
Mencegah pengguna mengirim uang ke dirinya sendiri.

if [ "$jumlah" -lt 10000 ]; then
 echo "Minimal transfer adalah Rp10.000"
 return
fi
Menolak transaksi jika nominal di bawah Rp10.000.

init_saldo_file "$pengirim"
init_saldo_file "$penerima"
Pastikan file saldo pengirim dan penerima sudah ada (buat jika belum ada).

file_pengirim=$(get_saldo_file "$pengirim")
file_penerima=$(get_saldo_file "$penerima")
saldo_pengirim=$(<"$file_pengirim")
saldo_penerima=$(<"$file_penerima")
Mendapatkan file dan isi saldo masing-masing pengguna.

if [ "$jumlah" -le "$saldo_pengirim" ]; then
 saldo_pengirim_baru=$((saldo_pengirim - jumlah))
 saldo_penerima_baru=$((saldo_penerima + jumlah))
 ...
else
 echo "Gagal: Saldo $pengirim tidak cukup!"
fi
Memastikan saldo pengirim cukup

Jika cukup:
Saldo pengirim dikurangi
Saldo penerima ditambah
File saldo diperbarui
Transaksi dicatat ke log
Notifikasi sukses

Jika tidak cukup:
Menampilkan pesan gagal

echo "$(date '+%Y-%m-%d %H:%M:%S') - $pengirim mentransfer ke $penerima sebesar Rp$jumlah (Saldo: Rp$saldo_pengirim_baru)" >> "$LOG_FILE"
Catatan waktu, nama pengirim, penerima, jumlah, dan saldo sisa disimpan dalam log_bank.txt.

echo "Transfer berhasil dari $pengirim ke $penerima sebesar Rp$jumlah"
Menampilkan bahwa transfer berhasil dilakukan.

 

7. tambahkan syntax keluar


 echo "Terima kasih telah menggunakan sistem bank daffa!"
 exit 0
 ;;
Fungsi:
Menangani pilihan nomor 6 pada menu utama, yaitu "Keluar".
Menampilkan pesan perpisahan.
Menghentikan eksekusi program dengan exit 0, yang menandakan program selesai tanpa error.


*)
 echo "Pilihan tidak valid. Silakan coba lagi."
 ;;
Fungsi:
Menangani input selain angka 1–6.
Menampilkan pesan bahwa pilihan tidak valid.


while true; do
 menu
 echo ""
 read -p "Tekan Enter untuk kembali ke menu..."
done
Fungsi:
while true: Membuat program berjalan terus-menerus (loop tak hingga), selama pengguna tidak memilih menu ke-6 (keluar).
Memanggil fungsi menu setiap kali.
Setelah selesai 1 menu, menunggu user menekan Enter untuk kembali ke menu utama.

 

8. buatlah syntax backup_harian.sh


LOG_FILE="/home/$USER/log_bank.txt"
TANGGAL_HARI_INI=$(date '+%Y-%m-%d')
LOG_FILE: Lokasi file log utama yang menyimpan semua transaksi.
TANGGAL_HARI_INI: Menyimpan tanggal hari ini dalam format YYYY-MM-DD, untuk filter transaksi harian.

for saldo_file in /home/$USER/saldo_*.txt; do
Mencari semua file dengan pola saldo_nama.txt.
Tiap file mewakili satu pengguna yang sudah pernah mendaftar.

nama=$(basename "$saldo_file" | sed 's/saldo_//' | sed 's/.txt//')
Dari file saldo_daffa.txt, diambil nama daffa.


OUTPUT_FILE="/home/$USER/backup_[object HTMLInputElement].txt"
Backup tiap pengguna disimpan di file backup_nama.txt.
Semua backup ditulis ke file yang sama tiap hari (tanggal ditulis di dalam file, bukan di nama file).

total_deposit=$(...)      # Jumlah deposit hari ini oleh pengguna
total_withdraw=$(...)     # Jumlah withdraw hari ini oleh pengguna
total_transfer=$(...)     # Jumlah transfer dari pengguna ke orang lain hari ini

Cara kerjanya:
grep "$TANGGAL_HARI_INI": Filter hanya baris dengan tanggal hari ini.
grep "$nama melakukan DEPOSIT": Filter baris khusus pengguna ini dan jenis transaksi.
awk -F'sebesar Rp' '{sum += $2} END {print sum+0}': Menjumlahkan seluruh angka Rp... dari baris tersebut.


if [ "$total_deposit" -gt 0 ] || [ "$total_withdraw" -gt 0 ] || [ "$total_transfer" -gt 0 ]; then
Hanya menulis ke file jika hari itu ada aktivitas transaksi oleh pengguna.


{
 echo "Backup Transaksi Harian"
 echo "Tanggal   : $TANGGAL_HARI_INI"
 ...
} >> "$OUTPUT_FILE"
Ditambahkan ke file backup pengguna.
Berisi: tanggal, nama, total transaksi harian (deposit, withdraw, transfer).

 

9. isi saat menggunakan crontab -e

setiap jam 23:59 akan melakukan backup yang dimana akan masuk ke dalam file backup_nama.txt.

 

HASIL OUTPUT

1. Tampilan jika deposit salah

 

2. Tampilan jika deposit benar

 

3. Tampilan jika withdraw salah

 

4. Tampilan jika withdraw benar

 

5. Tampilan jika lihat tabungan

 

6. tampilan riwayat transaksi

 

7. tampilan transfer gagal

 

8. tampilan transfer berhasil

 

9. tampilan riwayat transaksi transfer

 

9. tampilan backup setiap jam pada setiap pengguna

 

CARA KERJA

1. Pengguna menjalankan ./bank.sh.
2. Pengguna melakukan transaksi dengan pilihan menu (deposit, withdraw, cek saldo, transfer).
3. Transaksi dicatat ke file log.
4. backup_harian.sh (via crontab) akan membaca log harian dan menyimpan ringkasan ke file masing-masing pengguna.

Informasi Course Terkait
  Kategori: Cloud Computing
  Course: Cloud Computing