
Quero escrever um bash
script que obtenha um argumento de linha de comando e crie diretórios aninhados no diretório inicial do usuário. Por exemploa/b/c
mkdir -p $1/$2/$3
Mas quero criar não apenas três níveis de diretórios, quero obter o argumento de linha de comando 3 ou 5 e criar a quantidade necessária de diretórios aninhados
Responder1
#!/bin/sh
(
IFS=/
mkdir -p "$*"
)
A expansão de "$*"
será uma string entre aspas simples que consiste em todos os argumentos do script concatenados junto com o primeiro caractere de $IFS
como delimitador. É por isso que também $IFS
definimos /
.
Estou executando isso em um subshell para evitar a configuração IFS
do restante do script (isso altera o comportamento de certas coisas, como o read
funcionamento). Se não houver mais nada no roteiro, você pode sair (
e )
sair.
Teste:
$ tree
.
`-- script.sh
0 directory, 1 file
$ ./script.sh 1 2 3 4 {a..k}
$ tree
.
|-- 1
| `-- 2
| `-- 3
| `-- 4
| `-- a
| `-- b
| `-- c
| `-- d
| `-- e
| `-- f
| `-- g
| `-- h
| `-- i
| `-- j
| `-- k
`-- script.sh
15 directories, 1 file
Responder2
Você pode definir o separador entre campos $IFS
como /
e "$*"
expandir para a/b/c/...
:
IFS=/
mkdir -p "$*"