Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création de répertoires partagé script shell(bash)

    16 décembre 2023 à 16:19:24

    Hey, je voudrais faire en sorte de créer des utilisateurs (avec la première lettre du prénom et 7 lettres du nom, et avec un tiret si c'est un nom composé) grâce a un fichier csv et ajouter pour chacun d'eux des dossiers personnels, jusque la tout va bien, mais ensuite je voudrais créer des répertoires partager a chacun des membres du groupe ca pose un problème, je ne voit pas trop d'où ca pourrais venir. voici le script 
    #!/bin/bash
    
    file_path="nanti.csv"   # a telecharger et mettre dans le dossier "documents"
    
    # Creation des groupes (sauf ChefsDeServices)
    groupadd Technology
    groupadd Consumer
    groupadd Diversified
    groupadd Energy
    groupadd Retail
    groupadd Industrial
    groupadd 'Food&Beverage'
    groupadd Finance
    groupadd Entertainment
    groupadd Commodities
    groupadd RealEstate
    groupadd HealthCare
    groupadd Services
    
    # Lecture du fichier CSV
    while IFS=";" read -r prenom nom password department
    
    
    if [[ "$nom" == *" "* ]]; then
            nom_compose="${nom// /-}"
            login="${prenom:0:1}${nom_compose:0:7}"
    else
        # Generation du login
        login="${prenom:0:1}${nom:0:7}"
    fi
    count=1
    original_login=$login
    
    while id "$login" &>/dev/null; do
    	login="${original_login}$(printf '%02d' "$count")"
    	((count++))
    done
    
    # Creation de l'utilisateur
    useradd -m -d "/home/$login" -s /bin/bash -c "Utilisateur $prenom $nom" -p "$(openssl passwd -1 $password)" "$login"
    
    # Creation des répertoires personnels
    mkdir -p "/home/$login/Documents"
    mkdir -p "/home/$login/Projets"
    mkdir -p "/home/$login/Telechargements"
    
    # Attribution des permissions pour le repertoire personnel
    chown -R "$login":"$login" "/home/$login"
    
    # Attribution du user au group correspondant
    usermod -a -G "$department" "$login"
    
    # Ajout du repertoire sharedFolderForChief
    mkdir -p /home/sharedFolderForChief
    chmod 770 /home/sharedFolderForChief
    
    # Attribution des permissions aux chefs de service
    for chef in EMusk BArnault WBuffett MAmbani AOrtega JFlesher JBadgerM KGriffin MAdelson VPotanin LKa-shin TFrist GAponte; do
        usermod -a -G "ChefsDeService" "$chef"
        chown -R "$chef":"ChefsDeService" "/home/sharedFolderForChief"
        chmod 770 "/home/sharedFolderForChief"
    done
    
    done < "$file_path"
    
    # Attribution des permissions appropriees
    chmod 700 /home/*/Documents
    chmod 700 /home/*/Projets
    chmod 700 /home/*/Telechargements
    
    # Creation du repertoire sharedFolderForAll
    mkdir -p /home/sharedFolderForAll
    chmod 777 /home/sharedFolderForAll

    et voici le fichier csv : le but est de creer un répertoire pour chaque personne, un autre pour chaque groupe, et un autre pour les chefs de groupe. Les chefs de groupe sont : EMusk BArnault WBuffett MAmbani AOrtega JFlesher JBadgerM KGriffin MAdelson VPotanin LKa-shin TFrist et GAponte

    forename;name;password;department
    Elon;Musk;$220B;Technology
    Bernard;Arnault;$172B;Consumer
    Jeff;Bezos;$170B;Technology
    Bill;Gates;$134B;Technology
    Larry;Ellison;$131B;Technology
    Steve;Ballmer;$130B;Technology
    Mark;Zuckerberg;$123B;Technology
    Larry;Page;$123B;Technology
    Warren;Buffett;$121B;Diversified
    Sergey;Brin;$117B;Technology
    Carlos;Slim;$92.8B;Diversified
    Francoise;Bettencourt Meyers;$92.5B;Consumer
    Mukesh;Ambani;$87.5B;Energy
    Amancio;Ortega;$80.1B;Retail
    Jim;Walton;$70.5B;Retail
    John;Walton;$69.3B;Retail
    Julia;Walton;$68.2B;Retail
    Michael;Dell;$67.9B;Technology
    Zhong;Shanshan;$65.0B;Diversified
    Julia;Flesher Koch;$64.4B;Industrial
    Charles;Koch;$60.5B;Industrial
    Gautam;Adani;$59.3B;Industrial
    Jacqueline;Badger Mars;$47.0B;Food & Beverage
    John;Mars;$47.0B;Food & Beverage
    Jensen;Huang;$44.8B;Technology
    Alain;Wertheimer;$44.4B;Consumer
    Gerard;Wertheimer;$44.4B;Consumer
    Zhang;Yiming;$42.3B;Technology
    Colin;Huang;$41.9B;Technology
    Phil;Knight;$41.3B;Consumer
    Len;Blavatnik;$38.7B;Diversified
    Klaus-Michael;Kuehne;$38.1B;Industrial
    Tadashi;Yanai;$38.0B;Retail
    Ma;Huateng;$37.6B;Technology
    William;Ding;$36.4B;Technology
    Ken;Griffin;$36.0B;Finance
    Stephen;Schwarzman;$36.0B;Finance
    Francois;Pinault;$35.3B;Consumer
    MacKenzie;Scott;$34.1B;Technology
    Miriam;Adelson;$33.6B;Entertainment
    Giovanni;Ferrero;$33.3B;Food & Beverage
    Abigail;Johnson;$33.2B;Finance
    Shapoor;Mistry;$32.4B;Industrial
    Vladimir;Potanin;$31.1B;Commodities
    Shiv;Nadar;$30.8B;Technology
    Dieter;Schwarz;$30.6B;Retail
    German;Larrea;$30.5B;Commodities
    Jack;Ma;$29.2B;Technology
    James;Simons;$28.5B;Finance
    Jeff;Yass;$28.4B;Finance
    Li;Ka-shing;$28.0B;Real Estate
    Leonid;Mikhelson;$27.8B;Energy
    Low;Tuck Kwong;$27.6B;Energy
    Susanne;Klatten;$26.9B;Industrial
    Eric;Schmidt;$26.8B;Technology
    Zeng;Yuqun;$26.5B;Industrial
    Andrew;Forrest;$25.8B;Commodities
    Lukas;Walton;$24.8B;Retail
    Vagit;Alekperov;$24.6B;Energy
    Thomas;Peterffy;$24.5B;Finance
    Iris;Fontbona;$24.4B;Commodities
    Reinhold;Wuerth;$24.0B;Industrial
    Gina;Rinehart;$24.0B;Commodities
    Vladimir;Lisin;$23.9B;Industrial
    Elaine;Marshall;$23.8B;Industrial
    Prajogo;Pangestu;$23.7B;Energy
    Takemitsu;Takizaki;$23.5B;Technology
    Changpeng;Zhao;$23.5B;Finance
    Stefan;Quandt;$23.1B;Industrial
    Azim;Premji;$23.0B;Technology
    He;Xiangjian;$22.9B;Consumer
    Ernesto;Bertarelli;$22.7B;Diversified
    Thomas;Frist;$22.6B;Technology
    Jorge;Paulo Lemann;$22.5B;Food & Beverage
    Eyal;Ofer;$22.0B;Diversified
    Henry;Cheng;$21.8B;Retail
    Budi;Hartono;$21.7B;Diversified
    Xu;Yangtian;$21.5B;Retail
    Dan;Gilbert;$20.8B;Real Estate
    Michael;Hartono;$20.6B;Diversified
    Alisher;Usmanov;$20.5B;Diversified
    Mark;Mateschitz;$20.3B;Food & Beverage
    Gianluigi;Aponte;$20.2B;Services
    Lee;Shau Kee;$20.0B;Real Estate
    Idan;Ofer;$20.0B;Energy
    Alexey;Mordashov;$19.9B;Industrial
    Liu;Yongxing;$19.7B;Industrial
    Dilip;Shanghvi;$19.6B;Health Care
    Dustin;Moskovitz;$19.4B;Technology
    Vicky;Safra;$19.1B;Finance
    Rodolphe;Saade;$18.6B;Services
    Eduardo;Saverin;$18.6B;Technology
    John;Menard;$18.5B;Retail
    Stefan;Persson;$18.4B;Retail
    Radhakishan;Damani;$18.1B;Retail
    Lakshmi;Mittal;$18.1B;Commodities
    James;Dyson;$18.0B;Consumer
    Savitri;Jindal;$17.8B;Commodities
    Wang;Chuan-Fu;$17.8B;Consumer
    Hasso;Plattner;$17.7B;Technology

    Les attendus du script sont :

    - de creer un répertoires sharedFolder ne sont accessibles que pour les groupes auxquels ils appartiennent

    - de creer un répertoire sharedFolderForChief qui n'est accessible qu'aux chefs de service

    - de creer un répertoire sharedFolderForAll est accessibles à tous

    je débute en shell donc des petites explications sont les bienvenues !

    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2023 à 14:29:46

      quelque chose ne va pas dans ton script, je pense qu'il y a des problèmes dans les boucles (des éléments qui devraient être en dehors et qui n'y sont pas).

      Je créerais des fonctions pour traîter mes chaînes de caractères et leur concaténation, par exemple

      function traiter_chaine() {
          local chaine=$1
          IFS=';' read -a ADDR <<< "$chaine"
          for i in "${!ADDR[@]}"; do
              ADDR[$i]=$(echo "${ADDR[$i]}" | sed 's/ /-/g')
          done
          echo "${ADDR[@]}"
      }
      
      function traiter_liste() {
          local premier_element=$(echo "${1:0:1}" | tr '[:upper:]' '[:lower:]')
          local deuxieme_element=$(echo "$2" | tr '[:upper:]' '[:lower:]')
          if [ ${#deuxieme_element} -gt 7 ]; then
              deuxieme_element=${deuxieme_element:0:7}
          fi
          echo "${premier_element}${deuxieme_element}"
      }
      
      
      chaine_resultat=$(traiter_chaine "Elon;Hello World;20B;Technology")
      IFS=' ' read -ra tableau <<< "$chaine_resultat"
      
      resultat_final=$(traiter_liste "${tableau[0]}" "${tableau[1]}")
      echo "Résultat final : $resultat_final"
      

      seulement après je m'occuperai de la boucle itérant sur les lignes de mon fichier csv

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        17 décembre 2023 à 15:41:05

        fred1599 a écrit:

        quelque chose ne va pas dans ton script, je pense qu'il y a des problèmes dans les boucles (des éléments qui devraient être en dehors et qui n'y sont pas).

        Je créerais des fonctions pour traîter mes chaînes de caractères et leur concaténation, par exemple

        function traiter_chaine() {
            local chaine=$1
            IFS=';' read -a ADDR <<< "$chaine"
            for i in "${!ADDR[@]}"; do
                ADDR[$i]=$(echo "${ADDR[$i]}" | sed 's/ /-/g')
            done
            echo "${ADDR[@]}"
        }
        
        function traiter_liste() {
            local premier_element=$(echo "${1:0:1}" | tr '[:upper:]' '[:lower:]')
            local deuxieme_element=$(echo "$2" | tr '[:upper:]' '[:lower:]')
            if [ ${#deuxieme_element} -gt 7 ]; then
                deuxieme_element=${deuxieme_element:0:7}
            fi
            echo "${premier_element}${deuxieme_element}"
        }
        
        
        chaine_resultat=$(traiter_chaine "Elon;Hello World;20B;Technology")
        IFS=' ' read -ra tableau <<< "$chaine_resultat"
        
        resultat_final=$(traiter_liste "${tableau[0]}" "${tableau[1]}")
        echo "Résultat final : $resultat_final"
        

        seulement après je m'occuperai de la boucle itérant sur les lignes de mon fichier csv

        C'est bon j'ai réglé tous les problemes, pas eu besoin de faire des boucles autres que celles déja présentes mais merci quand même !



        • Partager sur Facebook
        • Partager sur Twitter
          18 décembre 2023 à 8:24:47

          Hello,

          Tant mieux si ça fonctionne, mais je n'ai jamais dis d'ajouter des boucles, relis mon message ;)

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          Création de répertoires partagé script shell(bash)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown