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"