All pastes #85182 Raw Edit

Anonymous

public shellscript v1 · immutable
·published 2006-07-11 19:04 UTC
rendered paste body
!/bin/bash# récupération des argumentsarg_mode="$1"arg_fichier="$2"declare -a expressioni=0while [ "$3" != "" ]; do   expression[i]="$3"   i=$[i+1]   shiftdonebase='/etc/portage/package.'usage() {    echo "\    usage: $0 <mode> <fichier> <expression>    mode: -a: ajouter un élément au fichier          -r: retirer un élément au fichier          -s: chercher un élément dans le fichier    fichier: au choix: keywords, use, mask ou unmask    expression: l'expression doit être consitituée au minimum de l'atom concerné.Si le fichier est keywords, un type de masque peut être spécifié, faute de quoi ~x86 est choisi par défaut.Si le fichier est use, les use a enlever ou ajouter doivent être spécifier à la suite de l'atome.            exemples:        $0 -r keywords dev-lang/python        $0 -a mask app-editors/emacs        $0 -a use dev-lang/ruby threads doc -tcltk        $0 -r use app-editor/vim vim-with-x        $0 -s use        $0 -s use x11-terms/rxvt-unicode"}       # traitement des argumentsarg_parse() {    case $arg_mode in        "-a" ) mode="ajouter" ;;        "-r" ) mode="retirer" ;;        "-s" ) mode="voir" ;;        * ) usage; exit;;    esac    if [ "$arg_fichier" == "keywords" ] || [ "$arg_fichier" == "use" ] || [ "$arg_fichier" == "mask" ] || [ "$arg_fichier" == "unmask" ]; then        fichier="$arg_fichier"    else        usage        exit    fi}ajouter() {    echo $1 >> $base$fichier    echo "ajout effectué"    exit}retirer() {    f_tmp="/dev/shm/$fichier"    cp $base$fichier $f_tmp    cp $base$fichier $base$fichier"~"    atom_preserv="$(echo $atom |sed 's/\//\\\//')" # il faut échapper le '/' dans le nom des atoms    if [ "$fichier" == "use" ] && [ "${tab_uses[0]}" != "" ]; then        i=0        while [ "${tab_uses[$i]}" != "" ]; do            awk '/'$atom_preserv'/ {sub(/ '${tab_uses[$i]}'/, "")}; {print}' $base$fichier > $f_tmp            mv $f_tmp $base$fichier            # on supprime toute la ligne s'il n'y a plus de use spécifié dedans            un_use="$(awk '/'$atom_preserv'/ {print $2}' $base$fichier)"            if [ "$un_use" == "" ]; then tab_uses[0]=""; retirer; fi            i=$[$i+1]        done    else        awk '$0 !~ "'$atom_preserv'"' $base$fichier > $f_tmp 2>&1        mv $f_tmp $base$fichier    fi    echo -e "atom(s) modifié(s):\n" "$(cat $base$fichier"~" | grep $atom | cut -d ' ' -f 1)"    exit}exist?() {    # on quitte en cas de demande incohérente    resultat="$(cat $base$fichier | grep $atom)"    if [ "$fichier" != "use" ] && [ "$mode" == "ajouter" ] && [ "$resultat" != "" ]; then        echo "cet atom est déjà présent dans $base$fichier"        exit    fi    if [ "$mode" == "retirer" ] && [ "$resultat" == "" ]; then        echo "cet atom n'est pas présent dans $base$fichier"        exit    fi}voir(){    if [ "$atom" != "" ]; then        recherche="$(cat $base$fichier | grep $atom)"        recherche="$(awk '/'$atom'/ ' $base$fichier | grep $atom)"        reg_atom="$(echo $atom | sed 's/^/\//')"        reg_atom="$(echo $reg_atom | sed 's/$/\//')"    else        recherche="$(cat $base$fichier)"    fi    if [ "$recherche" == "" ]; then        echo "cet atom n'est pas présent dans $base$fichier"    else        awk ''$reg_atom' {            texte="\033[33m" $1            i=2            while ( i <= NF ) {                if ( $i ~ /^-/ ) { texte=texte" \033[34m" }                else { texte=texte" \033[31m" }                texte=texte$i                i++            }            print texte        }' $base$fichier 2>&1    fi}# mainarg_parseatom=${expression[0]}case $fichier in    "keywords" )        if [ "${expression[1]}" != "" ]; then keyword=${expression[1]}; else keyword="~x86"; fi # par défaut, le keyword est ~x86        case $mode in            "ajouter" ) exist?; ajouter "$atom $keyword";;            "retirer" ) exist?; retirer;;            "voir" ) voir;;        esac;;    "mask" | "unmask" )        case $mode in            "ajouter" ) exist?; ajouter $atom;;            "retirer" ) exist?; retirer;;            "voir" ) voir;;        esac ;;    "use" )        declare -a tab_uses        i=1        while [ "${expression[$i]}" != "" ]; do tab_uses[$i-1]="${expression[$i]}"; i=$[$i+1];  done        case $mode in            "ajouter" )                exist?                if [ "$resultat" == "" ]; then                    ajouter "$atom ${tab_uses[*]}"                else                    echo -e "atom(s) modifié(s):"                    j=0                    nbr_lignes=$(echo -e "$resultat" | wc -l)                    for (( j=1; j <= nbr_lignes; j++ )); do                        i=0                        cp $base$fichier $base$fichier"~"                        atom_tmp="$(echo -e "$resultat" | head -n $j | tail -n 1)"                        while [ "${tab_uses[$i]}" != "" ]; do                            resultat_preserv="$(echo -e "$atom_tmp" |sed 's/\//\\\//')"                            sed -i 's/'"$resultat_preserv"'/'"$resultat_preserv"' '${tab_uses[$i]}'/' $base$fichier                            i=$[$i+1]                        done                        echo -e "$atom_tmp" | cut -d ' ' -f 1                    done                fi                ;;            "retirer" ) exist?; retirer;;            "voir" ) voir ;;        esac;;esac