| 1 | #! /bin/bash |
| 2 | # |
| 3 | # is_installed - a script to find if a package |
| 4 | # is currently installed on Slackware and derivates |
| 5 | |
| 6 | # var |
| 7 | SHOWHELP=69 |
| 8 | E_NOPKGFOUND=70 |
| 9 | E_NOARGS=71 |
| 10 | PKGS_PATH="/var/log/packages" |
| 11 | |
| 12 | PROG=$(basename $0) |
| 13 | |
| 14 | |
| 15 | # colors |
| 16 | RED='\033[1;31m' |
| 17 | ORANGE='\033[1;33m' |
| 18 | GREEN='\033[1;32m' |
| 19 | MAGENTA='\033[1;35m' |
| 20 | NC='\033[0m' |
| 21 | |
| 22 | function search_file () { |
| 23 | SEARCH=$1 |
| 24 | if [ -z $1 ]; then |
| 25 | #we don't have a string to search |
| 26 | echo -e "Usage: ${MAGENTA}$PROG ${NC}[file-search] ${GREEN}< filename >" |
| 27 | echo -e "${RED}exiting${NC}" |
| 28 | exit $E_NOARGS |
| 29 | fi |
| 30 | finding=$(grep -Hi "$SEARCH" ${PKGS_PATH}/*) |
| 31 | if [[ ! -z $finding ]]; then |
| 32 | old_IFS=$IFS |
| 33 | IFS=$'\n' |
| 34 | old_pkgname="" |
| 35 | for line in $finding; do |
| 36 | pkgname=$(echo $line | cut -d":" -f 1) |
| 37 | match=$(echo $line | cut -d":" -f 2) |
| 38 | if [[ $pkgname != $old_pkgname ]]; then |
| 39 | echo -e "${ORANGE}$(basename $pkgname)${NC}" |
| 40 | fi |
| 41 | old_pkgname=$pkgname |
| 42 | echo -en "\t${GREEN}$match${NC}\n" |
| 43 | done |
| 44 | IFS=${old_IFS} |
| 45 | else |
| 46 | echo -e "${ORANGE}no match for pattern ${GREEN}'$SEARCH' ${ORANGE}found" |
| 47 | echo -e "${RED}exiting${NC}" |
| 48 | exit $E_NOPKGFOUND |
| 49 | fi |
| 50 | } |
| 51 | |
| 52 | function search_package () { |
| 53 | SEARCH=$1 |
| 54 | if [ -z $1 ]; then |
| 55 | #we don't have a string to search |
| 56 | echo -e "Usage: ${MAGENTA}$PROG ${GREEN}<filename>" |
| 57 | echo -e "${RED}exiting${NC}" |
| 58 | exit $E_NOARGS |
| 59 | fi |
| 60 | finding=$(/bin/ls -1 $PKGS_PATH |grep -i "$SEARCH") |
| 61 | if [[ ! -z $finding ]]; then |
| 62 | echo -en "${GREEN}$finding\n" |
| 63 | echo -e "${NC}" |
| 64 | else |
| 65 | echo -e "${ORANGE}no package matching ${GREEN}'$SEARCH' ${ORANGE}found" |
| 66 | echo -e "${RED}exiting${NC}" |
| 67 | exit $E_NOPKGFOUND |
| 68 | fi |
| 69 | } |
| 70 | |
| 71 | function info () { |
| 72 | SEARCH=$1 |
| 73 | if [ -z $1 ]; then |
| 74 | #we don't have a string to search |
| 75 | echo -e "Usage: ${MAGENTA}$PROG ${ORANGE}info ${GREEN}<filename>" |
| 76 | echo -e "${RED}exiting${NC}" |
| 77 | exit $E_NOARGS |
| 78 | fi |
| 79 | finding=$(/bin/ls -1 $PKGS_PATH |grep -i "$SEARCH") |
| 80 | if [[ ! -z $finding ]]; then |
| 81 | less $PKGS_PATH/$finding |
| 82 | else |
| 83 | echo -e "${ORANGE}no package matching ${GREEN}'$SEARCH' ${ORANGE}found" |
| 84 | echo -e "${RED}exiting${NC}" |
| 85 | exit $E_NOPKGFOUND |
| 86 | fi |
| 87 | } |
| 88 | |
| 89 | function help () { |
| 90 | echo |
| 91 | echo -e "${MAGENTA}$PROG${NC} -\tSearch for installed packages in the system" |
| 92 | echo -e "\t\tand show which package contains a specific file." |
| 93 | echo -e "${GREEN}USAGE:" |
| 94 | echo -e "\t${MAGENTA}$PROG ${ORANGE}[ file-search ] [ help ] ${GREEN}< item >" |
| 95 | echo -e "\t${MAGENTA}$PROG ${GREEN}<item>${NC} - Search between all installed packages for ${GREEN}item${NC}." |
| 96 | echo -e "\t${MAGENTA}$PROG ${ORANGE}file-search ${GREEN}<item>${NC} - Search for ${GREEN}item${NC} inside every package installed." |
| 97 | echo -e "\t${MAGENTA}$PROG ${ORANGE}help${NC} - Show this help and exit." |
| 98 | echo -e "${NC}" |
| 99 | } |
| 100 | # controlla se vengono passati parametri |
| 101 | if [ -z $1 ]; then |
| 102 | help |
| 103 | exit $E_NOARGS |
| 104 | else |
| 105 | case $1 in |
| 106 | "file-search" ) |
| 107 | search_file $2 |
| 108 | ;; |
| 109 | "info" ) |
| 110 | info $2 |
| 111 | ;; |
| 112 | "help" ) |
| 113 | help |
| 114 | exit $SHOWHELP |
| 115 | ;; |
| 116 | * ) |
| 117 | search_package $1 |
| 118 | ;; |
| 119 | esac |
| 120 | fi |
| 121 | |
| 122 | |
| 123 | exit |