Como crio um arquivo de script para comandos do terminal?


114

No Windows, posso escrever um arquivo contendo comandos para o cmd (normalmente .cmdou .batarquivos). Quando clico nesses arquivos, ele abre cmd.exee executa os comandos que o arquivo contém.

Como eu faria isso no Ubuntu?

Tenho certeza de que é uma duplicata, mas não consigo encontrar minha resposta.
É semelhante a estas perguntas, mas elas não respondem à pergunta:

Armazene comandos de terminal usados ​​com frequência em um arquivo

Emulador de CMD.exe no Ubuntu para executar o arquivo .cmd / .bat

Respostas:


150

Existem dois métodos.

Primeiro, o mais comum é escrever um arquivo, verifique se a primeira linha está

#!/bin/bash

Salve o arquivo. Em seguida, marque-o como executável usandochmod +x file

Então, quando você clicar (ou executar o arquivo no terminal), os comandos serão executados. Por convenção, esses arquivos geralmente não têm extensão, no entanto, você pode fazê-los terminar de .shqualquer outra maneira.

Algumas notas:

  • Qualquer arquivo (e eu quero dizer qualquer) pode ser executado no Linux, desde que a primeira linha seja um caminho para o programa que deve interpretar o arquivo. Exemplos comuns incluem /bin/python, /bin/sh, /bin/dash, mas mesmo estranhas coisas bola trabalhar como/bin/mysql
  • Bash é um idioma completo. É muito mais complexo que o cmd.exe no Windows. Possui uma forte linguagem de programação que suporta funções, loops, condicionais, operações de strings, etc.
  • Esses documentos podem ajudar se você tiver problemas.
  • Se você não deseja tornar o arquivo executável, execute-o passando-o como um argumento para bash: bash file/to/run.sh

Um exemplo simples do Bash

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

O segundo método é gravar comandos usando script. Corra scripte apenas faça as coisas. Quando você terminar de fazer coisas, o exitscript e o script gerarão um arquivo para você com todas as "coisas" que você fez. Isso é menos usado, mas funciona muito bem para criar coisas como macros. man scriptpara mais informações.


Você pode querer mudar isso /bin/bashpara /bin/sh, bash nem é o padrão para o Ubuntu.
— TC1

@ TC1 Está instalado por padrão, então não importa se é o padrão ou não.
— Carlos Campderrós

11
Eu gostaria de salientar que /bin/dash(que /bin/shgeralmente é vinculado a um link) é muito mais rápido que o bash (medi aproximadamente 15 vezes mais rápido). Se possível, use /bin/dashpara scripts shell :)
— MiJyn

4
Se você estiver na mesma pasta que o arquivo, certifique-se de ./file.sh
— coteyr

11
Eu tentei os dois métodos, mas se eu tentar clicar duas vezes no arquivo de script bash, ele abrirá o arquivo de texto no geany / gedit, pronto para edição. Eu gostaria que o script fosse executado com um clique duplo. Esta pergunta contém mais detalhes sobre o que eu quero fazer.
— Thymaro 27/04

15

Você quer dizer escrever em um arquivo usando um script de shell? Aqui estão algumas maneiras:

touch file

Esse método simplesmente criará um arquivo, mas se o arquivo já existir, ele simplesmente altera a data da modificação para a hora em que você usou esse comando.

echo "text" > file

Esse método substitui o conteúdo de filepara text. Se você deseja limpar um arquivo, basta fazer o seguinte:

echo "" > file

Digamos que você queira escrever mais de uma linha e não queira usar milhares de echocomandos, você usaria este comando:

cat << EOF > file
test
test1
foo
bar
EOF

Isso permite que você escreva várias linhas em um comando. O conteúdo de fileseria então o seguinte:

test
test1
foo
bar

Se você deseja anexar a um arquivo, substitua >por >>.

Espero que isto ajude!


EDIT : Ah, entendo, então você escreveria o arquivo no gedit, usando a .shextensão (opcional, mas é uma boa ideia) e, em um gerenciador de arquivos, clique com o botão direito do mouse no arquivo, selecione Propriedades-> Permissões e verifique Allow executing file as program. Então você pode clicar duas vezes nele e ele será executado :). Além disso, se você quiser fazer isso no terminal, poderá executar este comando para torná-lo executável (você pode querer acrescentar sudose não lhe pertencer):

chmod +x file

E para correr:

./file

Na verdade, o que eu quero fazer é escrever um arquivo, digamos gedit, que contenha comandos de terminal. Então, quando eu clicar duas vezes neste arquivo, ele executará esses comandos no terminal.
— Seth

Ótima resposta, atualização atenciosa. Para simplesmente criar um arquivo, eu sempre usei apenastouch filename
— TryTryAgain

@TryTryAgain, sim, esse é um método fácil, provavelmente mais rápido que echo "" > file. Tudo bem se eu incluir esse método na minha resposta?
— MiJyn

@MiJyn Absolutamente incluí-lo, fique à vontade. Obrigado
— TryTryAgain

Como posso rodar em qualquer lugar no terminal ... como um comando global?
— Omer

14

O equivalente aos arquivos em lote do Windows são scripts de shell, e um excelente guia de introdução é o Bash Scripting .

Na maioria das vezes, os comandos que você pode inserir na linha de comando podem ser colocados em um script de shell.

Algumas coisas diferentes dos arquivos em lotes do Windows:

  • Existem diferentes interpretadores de comando, chamados shells. O padrão é bash, mas se você estiver interessado, existem outros, como zsh, ksh, dash, perl, python, etc.

  • Para executar um script de shell, você precisa tornar o arquivo executável, o que você pode fazer com chmod +x <filename>

  • No Ubuntu, o diretório atual não é o caminho de pesquisa do programa, portanto, você precisa executar ./<filename>, não<filename>

  • Os nomes de variáveis ​​são $<varname>, não%<varname>%

  • Os comandos em um script de shell não são impressos por padrão, como em um arquivo em lotes.

  • A extensão do nome do arquivo pode ser .shou (mais comum) você não precisa usar uma extensão. Coloque #!/bin/basha primeira linha do arquivo , que informa ao Ubuntu qual programa usar para executar o arquivo.

  • Os comentários começam com #, não rem.

Espero que isso ajude e divirta-se com scripts!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.