Criando diretórios e subdiretórios com base na entrada do usuário do que na exibição de diretórios criados?

0

Ok, estou aprendendo Linux na faculdade. Eu realmente não sou tão bom, e quero melhorar muito, então tenha paciência comigo. Eu escrevi este código:

Sim, eu sei que este código não funciona, mas talvez eu possa mostrar o que quero dizer.

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE"
mkdir -p "$BASE/$BASE1"
mkdir -p "$BASE/$BASE2"
mkdir -p "$BASE/$BASE3"
mkdir -p "$BASE/$BASE4"
mkdir -p "$BASE/$BASE5"
ls -d */

Ok, então, fazendo um pouco de pesquisa on-line, acho que posso precisar usar globs para isso, mas meu professor realmente não mencionou. Os requisitos para esse script são que ele solicite um nome de diretório base e que crie um diretório base mais exatamente 5 subdiretórios baseados na entrada do usuário do que os diretórios criados em um comando echo ou ls.

    
por David Prentice 27.10.2015 / 02:34

2 respostas

0

Você precisa separar $ BASE dos números (1..5), caso contrário, sh interpretará o que você deseja como uma variável chamada, por exemplo, $BASE1 em vez de fornecer o valor de $BASE com 1 anexado.

Aqui está uma versão corrigida e melhorada do seu script.

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" "$BASE/$BASE"{1..5}
ls -1d $BASE $BASE/*

Se você não estiver usando bash ou zsh ou ksh ou qualquer outro shell que suporte {1..5} , poderá fazer isso:

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" 
for i in 1 2 3 4 5 ; do mkdir -p "$BASE/$BASE$i" ; done
ls -1d $BASE $BASE/*
    
por 27.10.2015 / 02:57
0

Em bash , gostaria de fazer:

#!/usr/bin/bash
base="$1" #Get it from the argument, prompts for input aren't very unixy
mkdir -p "$base/$base"{1..5}
ls -d */

Em dash você não pode usar {1..5} , então:

for i in 'seq 5'; do mkdir -p "$base/$base${i}"; done
    
por 27.10.2015 / 03:02

Tags