fdd76fc5 |
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 |