Entrada do script bash do Linux sem usar “read” [closed]

1

Eu preciso criar um script bash onde um único argumento é passado pelo usuário (sem usar a opção de entrada "read") na linha de comando do terminal que cria um diretório com esse nome, ou notifica o usuário de tal diretório existe. A maior parte do script parece bastante direta, exceto pela entrada sendo passada para a opção de entrada mkdir sem leitura.

Coisas que experimentei, mas falhei:

1) Solicitando que o usuário insira um nome para um diretório no terminal e, em seguida, execute o script novamente e use a opção history como entrada.

2) Tentativa de escrever a entrada do usuário em um arquivo, apenas para perceber que ele requer leitura.

Qualquer dica ou ajuda seria muito apreciada. Agradeço antecipadamente.

    
por Anton Gorbunov 10.12.2015 / 01:01

1 resposta

2

a single argument is passed by the user (without using the "read" input option) at the terminal command line that creates a directory with that name, or otherwise notifies the user it exists...

Parece que os parâmetros de linha de comando posicionais comuns são o que você precisa:

Código fonte do script para mkdir1 :

#!/bin/sh
mkdir "$1"

Uso

./mkdir1 foo
./mkdir1 foo
mkdir: cannot create directory ‘foo’: File exists

foo foi criado na primeira vez que executei mkdir1 . Na segunda vez, ele me avisou que já existe.

Isso parece atender às suas especificações, e a leitura não foi necessária.

Explicação

$1 é o primeiro parâmetro posicional. $2 seria o segundo, etc.

Para exemplos mais complexos do que essa pergunta exige, você pode encontrar mais informações sobre parâmetros posicionais de várias fontes, como o bash Wiki de hackers , resumido aqui:

$0           is usually the name of the shell
$FUNCNAME    the function name if inside a function, or $0
$1 - $9      the argument list elements from 1 to 9
${10} - ${N} the argument list elements beyond 9

$*  all positional parameters except $0
$@  all positional parameters except $0
$#  the number of arguments, not counting $0
    
por 10.12.2015 / 01:07