8 votes

Bash script pour créer un répertoire

Je suis en train de m'amuser avec des scripts, je suis capable de créer un script qui, lorsqu'il est exécuté, me demande un nom pour un nouveau répertoire, le crée, puis crée plusieurs fichiers, renvoie des lignes, puis supprime tout.

Ce que je voudrais faire, c'est le modifier légèrement pour qu'il crée et nomme le répertoire tout seul !

Je sais que c'est un exercice inutile, mais c'est la meilleure façon d'apprendre.

Voici mon script actuel :

#!/bin/bash   
echo "Give a directory name to create:"    
read NEW_DIR    
ORIG_DIR=$(pwd)    
[[ -d $NEW_DIR ]] && echo $NEW_DIR already exists, aborting && exit    
mkdir  $NEW_DIR    
cd $NEW_DIR    
pwd    
for n in 9 8 7 6 5 4 3 2 1 0    
do        
touch file$n    
done

ls file?    

for names in file?    
do       
echo This file is named $names > $names    
done

cat file?

cd $ORIG_DIR

rm -rf $NEW_DIR

echo "Goodbye"

5voto

Yaron Points 12081

Au lieu d'utiliser le read afin d'obtenir la valeur de NEW_DIR à partir de l'entrée, vous pouvez définir une valeur codée en dur pour l'option NOUVEAU_DIR de la manière suivante :

remplacez la ligne suivante dans votre script :

read NEW_DIR    

avec la ligne suivante :

NEW_DIR="new_dir_hard_coded_value"

Lien pour plus d'informations sur bash-scripting-tutorial/bash-variables

5voto

Zanna Points 65764

Si vous voulez une surprise, au lieu de coder le nom en dur, vous pouvez utiliser une technique pour générer une chaîne aléatoire, par exemple

NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)

Cela met NEW_DIR à une chaîne de huit caractères alphanumériques. Chaque fois que vous exécutez le script, le nouveau répertoire aura un nom aléatoire différent...

Ou pour obtenir un mot au hasard, choisissez un dictionnaire parmi les suivants /usr/share/dict/ et utiliser shuf par exemple :

$ shuf -n1 /usr/share/dict/british-english
soupier
$ shuf -n1 /usr/share/dict/british-english
penguins

Alors

NEW_DIR=$(shuf -n1 /usr/share/dict/british-english)
mkdir "$NEW_DIR"
...

3voto

Leo Points 441

Au lieu de demander la saisie de l'utilisateur, vous pouvez coder en dur des valeurs dans les scripts en utilisant l'opérateur d'affectation de variable (=). Ainsi, les deux lignes suivantes ,

echo "Give a directory name to create:"
read NEW\_DIR

peut être remplacé par une seule ligne.

NEW\_DIR="whatever\_name\_you\_please"

BTW, je sais que cela n'a rien à voir avec la question, mais dans les for que vous avez utilisée dans votre script, vous pouvez écrire un code abrégé pour la plage. Au lieu de 9 8 7 6 5 4 3 2 1 0 vous pouvez l'écrire comme suit

 for n in {9..0}

3voto

Lee Points 396

Vous pourriez même aller un peu plus loin : Vous pourriez dire à "read" de faire une proposition pour le nom du dossier, l'accepter en appuyant sur "return" ou le modifier comme vous le souhaitez :

read -p "Give a directory name to create: " -ei "default_name" NEW_DIR;

cela ferait apparaître une ligne :

Give a directory name to create: default_name

En combinaison avec les suggestions ci-dessus, vous pourriez faire ce qui suit :

# pre-set NEW_DIR to a value or to any random string 
# as suggested in the other answers
NEW_DIR="default_name"

# Prompt for new directory name, suggesting previously selected default answer
read -p "Give a directory name to create: " -ei "$NEW_DIR" NEW_DIR;

Notez que read -p "texte" demandera le texte et la réponse sur la même ligne. Si vous voulez vous en tenir à votre code et faire en sorte qu'il demande le format à 2 lignes, vous pouvez faire ce qui suit

echo "Give a directory name to create:"  
read -ei "$NEW_DIR" NEW_DIR

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X