Skip to content

Instantly share code, notes, and snippets.

@ecylmz
Created March 31, 2011 21:59
Show Gist options
  • Save ecylmz/897360 to your computer and use it in GitHub Desktop.
Save ecylmz/897360 to your computer and use it in GitHub Desktop.
#!/bin/bash
use std
PROGNAME=${0##*/}
ensuredeb wwwconfig-common
hascommand mysql || ensuredeb mysql-client
dbadmin=${WWWCONFIG_COMMON_DBADMIN:-root}
[ -z "$1" ] || dbname="$1"
[ -z "$1" ] || dbuser="$2"
ask_dbadmpass() {
asksecret "Mysql yönetici (root) parolası"
dbadmpass="$REPLY"
}
ask_dbname() {
if [ -z "$dbname" ]; then
ask "Veritabanı ismi (Örnek: 'moodle', 'wp')" "" must-non-empty
dbname="$REPLY"
fi
}
ask_dbuser() {
if [ -z "$dbuser" ]; then
ask "Veritabanı kullanıcısı" "$dbname" must-non-empty
dbuser="$REPLY"
fi
}
ask_dbpass() {
asksecret "'$dbuser' veritabanı kullanıcısı için parola" ${MKDB+""}
dbpass="$REPLY"
}
create_user() {
(
. /usr/share/wwwconfig-common/mysql-createuser.sh
if [ "$status" = "error" ]; then
echo >&2 "$error"
exit 1
fi
) || die "'$dbuser' isimli veritabanı kullanıcısı oluşturulamadı."
}
create_db() {
(
. /usr/share/wwwconfig-common/mysql-createdb.sh
if [ "$status" = "error" ]; then
echo >&2 "$error"
exit 1
fi
) || die "'$dbname' isimli veritabanı oluşturulamadı."
}
drop_user() {
(
. /usr/share/wwwconfig-common/mysql-dropuser.sh
if [ "$status" = "error" ]; then
echo >&2 "$error"
exit 1
fi
) || die "'$dbuser' isimli veritabanı kullanıcısı silinemedi."
}
drop_db() {
(
. /usr/share/wwwconfig-common/mysql-dropdb.sh
if [ "$status" = "error" ]; then
echo >&2 "$error"
exit 1
fi
) || die "'$dbuser' isimli veritabanı kullanıcısı silinemedi."
}
case "${PROGNAME#x-}" in
mk*|make*|create*)
if [[ ${PROGNAME#x-} == *user* ]]; then
cry "Mysql kullanıcısı eklenecek..."
ask_dbadmpass
ask_dbuser
ask_dbname
cry "\nBu girdilerle devam edilecek:\n\n\tVeritabanı:$dbname\n\tKullanıcı: $dbuser\n"
if yesno "Onaylıyor musunuz?" e; then
export dbadmin dbadmpass dbname dbuser
else
exit
fi
else
cry "Veritabanı/kullanıcı çifti oluşturulacak..."
ask_dbadmpass
ask_dbname
ask_dbuser
ask_dbpass
create_user
cry "\nBu girdilerle devam edilecek:\n\n\tVeritabanı: $dbname\n\tKullanıcı: $dbuser\n"
if yesno "Onaylıyor musunuz?" e; then
export dbadmin dbadmpass dbname dbuser dbpass
else
exit
fi
fi
;;
rm*|remove*|drop*)
if [[ ${PROGNAME#x-} == *user* ]]; then
cry "Mysql kullanıcısı silinecek..."
ask_dbadmpass
ask_dbuser
cry "\nDİKKAT! kullanıcı silinecek!"
yesno "Emin misiniz?" h || exit
drop_user
else
cry "Veritabanı/kullanıcı çifti silinecek..."
ask_dbadmpass
ask_dbname
ask_dbuser
cry "\nDİKKAT! Veritabanı/kullanıcı çifti silinecek!"
yesno "Emin misiniz?" h || exit
drop_db
drop_user
fi
;;
*)
bug "Ne yapmamı bekliyorsun?"
;;
esac
@roktas
Copy link

roktas commented Apr 1, 2011

hiç fena gözükmüyor :-) @gdemir'e yazdıktan sonra farkettim. mk/rm kipi ve USERONLY kipini iki farklı case bloğunda tespit edin demiştim ama şimdi yazdığına baktığımda şunu görüyorum. sadece kip belirlemek dışında bir de mesajlar var yani "kullanıcı ekleyeceğim/sileceğim" falan gibi. sen bunları farketmiş ve ortak işleri fonksiyonlara dönüştürmüşsün, güzel. acaba diyorum şu sondakl if/elif bloğunu da kaldırp her şey yukarıdaki case'mi koysak. o case bloğu zaten yeterli akla sahip tekrar if/elif'te bu aklı kontrol etmeye gerek yok gibi geldi bana. umarım anlatabilmişimdir...

@roktas
Copy link

roktas commented Apr 1, 2011

bir kaç stayla notu:

  • işlev isimleri ve parantezler arasında boşluk olmasın (eskiden ben de böyle yapardım, fena da gözükmüyor, ama bir noktada yeni stile döndüm. 19/x'teki stayla neyse onunla devam edelim)
  • drop_db'de bir indent eksik

@roktas
Copy link

roktas commented Apr 1, 2011

ve tabii eşleştirmeleri biraz daha esnek tutalım. "mk*", "rm*" ve "*user*" gibi... @gdemir'e de yazdım bunu...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment