Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Se você quiser, os prompts podem executar scripts de shell e se comportar de maneira diferente em diferentes condições. Você pode até mesmo fazer com que o prompt toque uma melodia toda vez que emitir um comando, embora isso se torne enfadonho logo. Mais informações podem ser encontradas no Bash-Prompt HOWTO.


imagem

7.2.5. Scripts de shell


7.2.5.1. O que são scripts?


Um script de shell é, como vimos nos exemplos de configuração de shell, um arquivo de texto contendo comandos de shell. Quando esse arquivo é usado como o primeiro argumento não opcional ao invocar o Bash, e nem o -c nem -s opção for fornecida, o Bash lê e executa comandos do arquivo e, em seguida, sai. Este modo de operação cria um

shell não interativo. Quando o Bash executa um script de shell, ele define o parâmetro especial 0 para o nome do arquivo, ao invés do nome do shell, e os parâmetros posicionais (tudo após o nome do script) são configurados para os argumentos restantes, se algum for fornecido. Se nenhum argumento adicional for fornecido, os parâmetros posicionais não serão definidos.


Um script de shell pode ser tornado executável usando o chmod comando para ligar o bit de execução. Quando o Bash encontra esse arquivo enquanto pesquisa o PATH para um comando, ele gera um sub-shell para executá-lo. Em outras palavras, executando


nome do arquivo ARGUMENTOS


é equivalente a executar


bater ARGUMENTOS de nome de arquivo


se "nome do arquivo" é um script de shell executável. Este sub-shell se reinicializa, de modo que o efeito é como se um novo shell tivesse sido invocado para interpretar o script, com a exceção de que as localizações dos comandos lembrados pelo pai (ver hash nas páginas de informações) são retidos pela criança.


A maioria das versões do UNIX torna isso parte do mecanismo de execução de comandos do sistema operacional. Se a primeira linha de um script começar com os dois caracteres "#!", O restante da linha especifica um interpretador para o programa. Assim, você pode especificar bater, awk, perl ou algum outro interpretador ou shell e escreva o resto do arquivo de script nesse idioma.


Os argumentos para o intérprete consistem em um único argumento opcional após o nome do intérprete na primeira linha do arquivo de script, seguido pelo nome do arquivo de script, seguido pelo resto dos argumentos. O Bash executará essa ação em sistemas operacionais que não fazem isso por conta própria.


Os scripts Bash geralmente começam com


#! / bin / bash (assumindo que o Bash foi instalado em / bin), pois isso garante que o Bash será usado para interpretar o script, mesmo se ele for executado em outro shell.


imagem


7.2.5.2. Alguns exemplos simples


Um script muito simples que consiste em apenas um comando, que diz olá ao usuário que o executa:


[jerry @ nowhere ~] gato olá.sh

#! / Bin / bash

echo "Olá $ USER"

[jerry @ nowhere ~] gato olá.sh

#! / Bin / bash

echo "Olá $ USER"

O script, na verdade, consiste em apenas um comando, eco, que usa o valor de ($) o USUÁRIO variável de ambiente para imprimir uma string personalizada para o usuário que está emitindo o comando.


Outro one-liner, usado para exibir usuários conectados:


#! / Bin / bash

quem | cut -d "" -f 1 | sort -u

#! / Bin / bash

quem | cut -d "" -f 1 | sort -u

Aqui está um script que consiste em mais algumas linhas, que utilizo para fazer cópias de backup de todos os arquivos em um diretório. O script primeiro faz uma lista de todos os arquivos no diretório atual e a coloca na variável LISTA. Em seguida, ele define o nome da cópia para cada arquivo e, em seguida, copia o arquivo. Para cada arquivo, uma mensagem é impressa:


tille: ~> cat bin / makebackupfiles.sh

#! / Bin / bash

# faz cópias de todos os arquivos em um diretório LIST = `ls`

para i em $ LIST; Faz

ORIG = $ i

DEST = $ i.old

cp $ ORIG $ DEST echo "copiado $ i"

feito

tille: ~> cat bin / makebackupfiles.sh

#! / Bin / bash

# faz cópias de todos os arquivos em um diretório LIST = `ls`

para i em $ LIST; Faz

ORIG = $ i

DEST = $ i.old

cp $ ORIG $ DEST echo "copiado $ i"

feito

Basta inserir uma linha como mv * *.velho não funcionará, como você notará ao tentar isso em um conjunto de arquivos de teste. Um eco comando foi adicionado a fim de exibir alguma atividade. ecoGeralmente, os 's são úteis quando um script não funciona: insira um após cada etapa duvidosa e você encontrará o erro rapidamente.


O /etc/rc.d/init.d diretório contém muitos exemplos. Vejamos este script que controla o servidor fictício ICanSeeYou:


# / Bin / sh

# descrição: ICanSeeYou permite que você veja pessoas em rede


# nome do processo: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

#config: /etc/ICanSeeYou.cfg


# Biblioteca de funções de origem.

. /etc/rc.d/init.d/functions


# Veja como (com quais argumentos) fomos chamados. caso "$ 1" em

começar)

echo -n "Iniciando ICanSeeYou:" daemon ICanSeeYou

eco

toque em / var / lock / subsys / ICanSeeYou

;;

Pare)

echo -n "Desligando ICanSeeYou:"

# / Bin / sh

# descrição: ICanSeeYou permite que você veja pessoas em rede


# nome do processo: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

#config: /etc/ICanSeeYou.cfg


# Biblioteca de funções de origem.

. /etc/rc.d/init.d/functions


# Veja como (com quais argumentos) fomos chamados. caso "$ 1" em

começar)

echo -n "Iniciando ICanSeeYou:" daemon ICanSeeYou

eco

toque em / var / lock / subsys / ICanSeeYou

;;

Pare)

echo -n "Desligando ICanSeeYou:"


killproc ICanSeeYou eco

rm -f / var / lock / subsys / ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

status)

status ICanSeeYou

;;

reinicialização)

$ 0 parada

$ 0 início

;;

*)

echo "Uso: $ 0 {start | stop | restart | status}" exit 1

esac


sair 0

killproc ICanSeeYou eco

rm -f / var / lock / subsys / ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

status)

status ICanSeeYou

;;

reinicialização)

$ 0 parada

$ 0 início

;;

*)

echo "Uso: $ 0 {start | stop | restart | status}" exit 1

esac


sair 0

Primeiro, com o . comando (ponto) um conjunto de funções de shell, usado por quase todos os scripts de shell em

/etc/rc.d/init.d, está carregado. Então uma casas é emitido o comando, que define 4 maneiras diferentes de execução do script. Um exemplo pode ser Eu posso ver você começo. A decisão de qual caso aplicar é feita lendo o (primeiro) argumento do script, com a expressão $1.


Quando nenhuma entrada compatível é fornecida, o caso padrão, marcado com um asterisco, é aplicado, no qual o script fornece uma mensagem de erro. o casas a lista termina com o esac demonstração. No começo caso o programa do servidor seja iniciado como um daemon e um ID de processo e bloqueio sejam atribuídos. No Pare Nesse caso, o processo do servidor é rastreado e interrompido, e o bloqueio e o PID são removidos. Opções, como o demônio opção e funções como killproc, são definidos no /etc/rc.d/init.d/functions Arquivo. Esta configuração é específica para a distribuição usada neste exemplo. Os scripts de inicialização em seu sistema podem usar outras funções, definidas em outros arquivos, ou nenhuma.


Em caso de sucesso, o script retorna um código de saída zero para seu pai.


Este script é um bom exemplo do uso de funções, que tornam o script mais fácil de ler e o trabalho mais rápido. Observe que eles usam sh em vez de bater, para torná-los úteis em uma ampla gama de sistemas. Em um sistema Linux, chamando bater as sh resulta na execução do shell no modo compatível com POSIX.


Top OS Cloud Computing na OnWorks: