Türkçe URL slug, BASH Script. (statik sitelerimiz için url dönüştürücü)

2020-05-27

Scripti indir ve çalışma iznini ver

$ wget https://gist.githubusercontent.com/rojenzaman/13c9b0c52646aef56096e39786782742/raw/66a1a29602a71ed4a949eced15c0c12a26908430/slug_v0.2.2.sh
$ chmod +x slug_v0.2.2.sh

Kullanımı (Pipe ve Parametre işleyebilir - Unix Felsefesine uygun yazılmıştır)

Birinci yaklaşım (tek satırlı işlem):

$ echo "FİSTİKÇİ ŞAHAP" | ./slug_v0.2.2.sh 
fistikci-sahap

İkinci yaklaşım(pipe) dosyayı scripte işletmek (çoklu satır):

$ cat urls.txt | ./slug_v0.2.2.sh 
istanbul-buyuk-sehir-belediyesi-spor
fenerbahce
kadikoy
istanbul

Üçüncü yaklaşım, parametreli (birden fazla parametre):

$ ./slug_v0.2.2.sh "ŞĞÜŞ" "ÇXıİ" "selam DünYalı"
sgus
cxii
selam-dunyali

Kaynak Kodu

#!/bin/bash
# a little update to: https://gist.github.com/rosiba/d9c06fe15a661094d4da4565355225a8
#


# define replacements
declare -a repls=(
    "Ğg"
    "ğg"
    "Çc"
    "çc"
    "Şs"
    "şs"
    "Üu"
    "üu"
    "Öo"
    "öo"
    "İi"
    "ıi"
    " -"
    "--"
)

function slug() {
    slug=""

    for (( i=0; i<${#arg}; i++ )) 
    do
        char="${arg:$i:1}"
        ascii=$(printf "%d" "'$char")

        # if alphanumeric
        # locale encoding should be UTF-8 for this values to work
        if [[ ( $ascii -ge 48 && $ascii -le 57 ) || # numbers
            ( $ascii -ge 65 && $ascii -le 90 ) ||  # uppercase
            ( $ascii -ge 97 && $ascii -le 122 ) ]]; then # lowercase
            slug="$slug$char"
        else
            for (( j=0; j < ${#repls[@]}; j++ ))
            do
                from=${repls[$j]:0:1}
                to=${repls[$j]:1:1}
                if [[ $char == $from ]]; then
                    slug="$slug$to"
                    break
                fi
            done
        fi
    done

    if [[ $slug == "" ]]; then
        echo "words should contain at least one valid character"
        exit 1
    fi

    echo $slug | awk '{print tolower($0)}'
}

if tty -s
then
#FOR PARAMETERS
 for arg in "[email protected]"
 do
  slug;
 done
else
##FOR READ PIPE
 while read arg;
 do
  slug;
 done
fi
scriptbash

Rojen Zaman

Anarchist | GNU/Linux Sys. / DevOps
GnuPG: 0x9089BB25

fail2ban'da 5 defadan fazla banlanan ip adresi olursa onu /etc/hosts.deny dosyasına ekleyecek bir script

Hugo proje dizininde bulunan resimlerimizi sıkıştırma