quran

English translation of the Quran from the command line
git clone https://riazj.com/git/quran
Log | Files | Refs | README | LICENSE

quran (2557B)


      1 #!/bin/sh -e
      2 
      3 PREFIX="/usr/local/share/quran"
      4 SURAHS="$PREFIX/surahs.txt"
      5 QURAN="$PREFIX/quran.txt"
      6 
      7 case "$1" in
      8   -l) cat "$SURAHS"; exit ;;
      9   -s) shift; grep -i --color=always "${*:-$(cat)}" "$QURAN"; exit ;;
     10   -h|"")
     11     echo "Options:"
     12     echo "  -s  search"
     13     echo "  -l  list surahs"
     14     echo "  -h  show this message"
     15     echo
     16     echo "Examples:"
     17     echo "  quran falaq       read surah Falaq"
     18     echo "  quran falaq:5     read surah Falaq, ayah 5"
     19     echo "  quran falaq:3-5   read surah Falaq, ayat 3-5"
     20     echo "  quran falaq-naas  read surah Falaq to surah Naas"
     21     echo
     22     echo "  quran 113         read surah 113"
     23     echo "  quran 113:5       read surah 113, ayah 5"
     24     echo "  quran 113:3-5     read surah 113, ayat 3-5"
     25     echo "  quran 113-114     read surah 113 to surah 114"
     26     exit ;;
     27 esac
     28 
     29 error() {
     30   echo "quran: $1" >&2; exit 1
     31 }
     32 
     33 get_surah_number() {
     34   surah="${1%:*}"
     35   surah="$(grep -im1 "$surah" "$SURAHS")" || error "${1%:*}: surah not found"
     36   surah="${surah%%.*}"
     37 }
     38 
     39 read_ayah() {
     40   grep "\[$1\]" "$QURAN" || error "$1: ayah not found"
     41   exit
     42 }
     43 
     44 read_ayat() {
     45   start_ayah="${1#*:}"; start_ayah="${start_ayah%-*}"; end_ayah="${1#*-}"
     46 
     47   [ "$start_ayah" -le "$end_ayah" ] || error "$start_ayah-$end_ayah: invalid range of ayat"
     48   while [ "$start_ayah" -le "$end_ayah" ]; do
     49     grep "\[$surah:$start_ayah\]" "$QURAN"
     50     start_ayah=$((start_ayah+1))
     51   done
     52   exit
     53 }
     54 
     55 read_surah() {
     56   grep -B3 "\[$1:" "$QURAN"
     57   exit
     58 }
     59 
     60 read_surahs() {
     61   start_surah="$1"; end_surah="$2"
     62 
     63   [ "$start_surah" -le "$end_surah" ] || error "$start_surah-$end_surah: invalid range of surahs"
     64   while [ "$start_surah" -le "$end_surah" ]; do
     65     grep -B3 -A1 "\[$start_surah:" "$QURAN"
     66     start_surah=$((start_surah+1))
     67   done
     68   exit
     69 }
     70 
     71 echo "$1" | grep -q "^[[:digit:]]\+:[[:digit:]]\+$" ||
     72   echo "$1" | grep -q "^[[:alpha:]]\+:[[:digit:]]\+$" &&
     73   { get_surah_number "$1"; ayah="${1#*:}"; read_ayah "$surah:$ayah"; }
     74 
     75 echo "$1" | grep -q "^[[:digit:]]\+:[[:digit:]]\+-[[:digit:]]\+$" ||
     76   echo "$1" | grep -q "^[[:alpha:]]\+:[[:digit:]]\+-[[:digit:]]\+$" &&
     77   { get_surah_number "$1"; read_ayat "$1"; }
     78 
     79 echo "$1" | grep -q "^[[:digit:]]\+$" ||
     80   echo "$1" | grep -q "^[[:alpha:]]\+$" &&
     81   { get_surah_number "$1"; read_surah "$surah"; }
     82 
     83 echo "$1" | grep -q "^[[:digit:]]\+-[[:digit:]]\+$" ||
     84   echo "$1" | grep -q "^[[:alpha:]]\+-[[:alpha:]]\+$" &&
     85   { get_surah_number "${1%-*}"; start_surah=$surah
     86   get_surah_number "${1#*-}"; end_surah=$surah
     87   read_surahs "$start_surah" "$end_surah"; }
     88 
     89 error "invalid command: see quran -h"