Como escrever e usar um arquivo de comando em lote de texto

Como escrever e usar um arquivo de comando em lote de texto

Como posso escrever e usar depois disso um arquivo de comando em lote de texto típico?

Estou falando de um arquivo que possui os seguintes comandos:

sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit

Acho que posso escrever com o Leafpad, mas...

  1. Onde devo salvá-lo?

  2. Qual formato? Qual nome e extensão?

  3. Como posso utilizá-lo, depois disso, em uma sessão do LXTerminal, com apenas um pedido (idealmente se houvesse uma forma de utilizá-lo automaticamente cada vez que o sistema for inicializado)?

Muito obrigado pelo seu tempo!

Responder1

Não existem arquivos "lote" no mundo unix. Usamos scripts contendo "she-bangs". Para fazer um script como este, abra um editor de texto (como o Leafpad) e comece com uma linha como esta:

#!/path/to/interpreter

Onde /path/to/interpreterestá a localização do binário que será usado para interpretar seu script. No Linux costumamos usar "bash" (Bourne Again SHell), uma "evolução" do bom e velho Bourne Shell. O que o bash faz é basicamente executar binários com argumentos especificados no script a partir de caminhos incluídos na variável de ambiente PATH (geralmente inclui /bin, /sbin, /usr/bin, /usr/sbin e outros).

Mas você também pode usar outros interpretadores como Python, Perl, Ruby, sh, csh, zsh, dash, ksh, além de inúmeras opções.

Abaixo do she-bang vem o seu roteiro. No seu caso específico, para executar os comandos especificados, podemos usar o bash, em um script como este:

#!/bin/bash

# the line above sets bash as the interpreter

# note that "sudo" is not required here because we will run the script as super user later.

apt-get update
# updates APT repositories

apt-get upgrade
# check for software upgrades and upgrade them

apt-get autoremove
# remove obsolete packages

apt-get autoclean
# remove stored .deb files

apt-get check
# update package cache and check for broken dependencies

Agora salve seu arquivo. Não há necessidade de extensão, mas por razões simbólicas, nomeie-a com uma extensão .sh. Executaremos o script como superusuário, portanto não há necessidade de alterar as permissões do arquivo.

Abra um terminal e vá para o caminho onde você salvou seu script. Digamos que você o salvou como script.sh. Execute o seguinte comando:

chmod +x script.sh

chmodsignifica "modo de mudança" e é usado para alterar quem pode fazer o quê com seu script. +xadiciona a permissão de execução para todos os usuários, o que permite que qualquer pessoa execute o script como se fosse qualquer outro programa. Não vou entrar em uma lista completa do que significam todas as diferentes permissões, masessa questãoresume-os bastante bem. Depois disso, você pode digitar:

sudo ./script.sh

Não esqueça a parte ./ e não deixe espaços entre ., / e s. O sudocomando será executado ./script.shcom privilégios de root, portanto sua senha será necessária (você precisa ser o administrador do sistema, é claro).

Responder2

O que é chamado no mundo Windows de arquivo "lote" é chamado de "script" no mundo *NIX. Na maioria das vezes, os scripts são arquivos com vários comandos ou comandos organizados de maneiras específicas. Aqui estão algumas coisas que você deve saber:

Estrutura básica

Normalmente você verá algo assim:

#!/bin/sh
# Comments 
printf "Hello world"

A primeira linha especifica um intérprete (comumente referido como shebanglinha), a segunda é um comentário (qualquer coisa depois #não é interpretada, apenas texto simples), a terceira é o comando real

No terminal você pode chamar um arquivo sem a linha shebang. Isso fará com que o script seja lido e interpretado pelo seu shell atual (também conhecido como interpretador de comandos). Por exemplo, estou executando mksho shell. Eu especifico que #!/bin/shele será executado pelo shell padrão do Ubuntu - dash. Cada shell tem algumas especificações sobre a sintaxe dos comandos, portanto, você deve adaptar seu script de acordo.

Escrevendo roteiro

Isso deve ser feito em um editor de texto, mas você também pode escrever no LibreOffice Writer e depois salvá-lo em texto simples. Pessoalmente, eu apenas uso editores de texto de linha de comando ( nanona maior parte ou vim); a analogia aqui seria editnas versões anteriores ao Windows 7 do Windows.

Os nomes e extensões dos arquivos não importam nos sistemas *NIX, pois o sistema lê os primeiros bytes do arquivo para determinar seu tipo. Adquiri o hábito de adicionar .shextensões, mas na verdade é desnecessário.

Tornar o script executável

Isso é feito usando chmod 755 scriptName.sho comando. Significa read-write-executepermissões para o proprietário (você) read-executepara usuários que estão no grupo do proprietário (por exemplo, o proprietário do arquivo pode ser admin, portanto, se você pertence ao admingrupo, pode ler e executar o arquivo ) e read-executepara qualquer outra pessoa. Nunca dê permissões de gravação a outras pessoas! Se você tiver privilégios de superusuário, isso pode resultar em algum juju ruim (também conhecido como você pode ser hackeado e um usuário mal-intencionado alterará seus scripts para manter suas informações pessoais).

Executando scripts

Você sempre pode executar um script navegando até o local do script no terminal e digitando ./scriptName.

Para executar qualquer comando em qualquer lugar, incluindo scripts, eles devem ser armazenados em algum lugar do sistema que esteja incluído na $PATHvariável. Aqui está o que quero dizer:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin

$PATHvariável me diz que se um script ou arquivo binário executável estiver localizado em /usr/local/sbinou /usr/local/binem qualquer outro desses diretórios, posso executar esse comando apenas digitando-o no terminal.

Agora, para seus próprios scripts, você deve criar binuma pasta e armazenar os scripts lá. Se você estiver usando, bashseu .profilearquivo de configuração contém as seguintes linhas:

# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
#    PATH="$HOME/bin:$PATH"
#fi

Se você descomentar (remover #) antes das três últimas linhas (de ifaté fi), sua binpasta pessoal será incluída na $PATHvariável.

informação relacionada