Ficheiro Bash

Armadillo

Folding Member
Boas.
Sendo eu um novato em linux, peco-vos ajuda.

Entao eh o seguinte, preciso de criar um bash que me permita fazer as seguintes coisas:
1. verificar se um "mount" existe
2. executar um php (o wget serve?)

Se me puderem indicar informacoes, agradeco.

Obrigado.
 
Boas.

Entao eh o seguinte, preciso de criar um bash que me permita fazer as seguintes coisas:
1. verificar se um "mount" existe

relativamente a este ponto ve na man page do mount

o comando poderá ser algo do género
Código:
    mount [-l] [-t type]

lists all mounted file systems (of type type). The option -l adds the (ext2, ext3 and XFS) labels in this listing.
 
Basicamente o que eu preciso eh q quando o php va correr/executar, este mount tem q existir. Se ao fazer de novo o mount e n crashar o bash, tudo bem...
espero ter sido explicito.
 
para executares scripts php, basta que tenhas o cliente de php instalado na consola.

para enviar para uma variavel o resultado de um comando basta colocar esse comando dentro de acentos graves :

Ex:
T=`uname -a`

echo $T
 
Em lado algum tem que existir uma extensão no nome dos ficheiros. O que acontece é que por facilidade de implementação adoptou-se a extensão para visualmente marcar a diferença nos tipos de ficheiros! Grande parte dos sistemas de gestão de ficheiros também a utiliza para detectar de forma automatica o tipo de ficheiro. Os scripts bash não saão diferentes. Para correres um script tens 2 opções
  • "$sh nomedoficheiro" ou
  • permissão no ficheiro para executar e na primeira linha do ficheiro metes: "#!/bin/sh". Depois corres o ficheiro: "$./nomedoficheiro".
Onde escrevi "sh", podes por bash, pois no linux, em geral, o comando "sh" é um link para "bash".

Espero que tenha sido esclarecedor. Já agora, não faz muito sentido chamar um script bash para correr outro script; mais vale no cabecalho por "#!/bin/interpretador_de_php" e fazer do segundo modo que disse. Aquilo que se faz na bash de forma fácil faz-se no php de alguma forma; Aquio que se faz no php também se há de fazer na bash; tudo depende das "bibliotecas" que uses no php, que pode tornar a coisa mais fácil ou dificil. Só vejo algum sentido em usar a bash com o php se forem duas ou mais tarefas complicadas que sejam significativamente mais simples de implementar numa ou noutra.
 
Última edição:
Não.

Chegas à linha de comandos e escreves: php nomedoficheiro.php


Se não encontrar o comando php, então nada feito! Há máquinas que têm o php instalado no webserver mas que não têm instalado a interface de linha de comandos.
 
Basicamente o que eu preciso eh q quando o php va correr/executar, este mount tem q existir. Se ao fazer de novo o mount e n crashar o bash, tudo bem...
espero ter sido explicito.

Podes testar se um mount existe através do seu exit status.

Sempre que executas um comando, se fizeres "echo $?" imediatamente após a execução desse comando, é devolvido o seu exit status.

Nas páginas "man" do comando, custuma vir especificado que exit status é devolvido mediante o resultado da acção, ou seja, quando executares um comando de mount, se o mount já existir é devolvido um exit status, caso não exista é devolvido outro, caso dê erro ao montar, devolve outro e por ai fora.

Testa com um "if" (por exemplo) o exit status de um comando para perceberes se correu tudo bem ou não.
 
o que eu preciso eh q quando o php va correr/executar, este mount tem q existir.
No teu script PHP verificas se o que precisas está montado. Não precisas de [ba|c|z|tc|k]sh para isso.

Para saberes o que está montado a qualquer momento, lês o ficheiro '/etc/mtab'. Se sabes de PHP o suficiente para lidar com ficheiros e expressões regulares não vais ter puto de problema.

EDIT:
se o que pretendes é ter um script na crontab para:
1. Verificar se um determinado dispositivo está montado no sistema
2 . Se estiver montado, executa um script PHP num servidor Web (local ou remoto)

sugiro o seguinte secript Perl:
Código:
#!/usr/bin/perl 
use strict;
use warnings;
use IO::File;

my $fh = new IO::File "/etc/mtab", "r";
my $check_mounted = '/dev/sda4'; # define aqui o dispositivo que queres verificar

chomp(my @mounted = <$fh>); undef $fh;

if (grep {$_ =~/$check_mounted/ } @mounted) {
    # Se precisares do output do script PHP...
    print qx|/usr/bin/lynx --dump http://www.example.com/myscript.php|;
   
    # Se não precisas do output do script PHP, comenta a linha anterior e descomenta a seguinte
    #print qx|/usr/bin/lynx --dump http://www.example.com/myscript.php 1>/dev/null|;
}
 
Última edição:
basicamente, o q eu quero q o meu bash faça eh isto

Código:
#montar repositorio de dados
mount -t smbfs -o username=consumer,password=xpto //10.18.0.2/path /mnt/path

#executar autoexec.php
php autoexec.php
Ja testei no damSmallLinux executar varias vezes seguidas o mount de uma pasta e n deu erro nenhum.

Acham q funciona isto sempre, a correr uma vez por dia? o mount nao vai provocar um crash no bash?

por favor, sou um gaijo q conhece mto pouco lamp...
preciso da coisa mto simples.

Agradeço muito a ajuda de todos.
 
Última edição:
para q queres ver a 1ª linha do php?
o php n e chamado pra aqui...

so quero montar uma partilha e executar/correr um ficheiro php...
 
Última edição:
Se o comando "$ php autoexec.php" é executado sem erros e consegues montar o sistema não percebo qual é o teu problema.

Tens dúvidas se vai funcionar sempre??!
 
Exactamente, pq isto e pra correr em varias maquinas e provavelmente vao ter versoes diferentes de linux. o que eu me pergunto eh se o bash funciona sem crashar (porque vai montar a partilha todos os dias) no ubunto, redhat, ipbrick, etc?

Nao vou por um bash a testar em servidores de producao sem ter a certeza, ou pelo menos sem a opiniao de outras pessoas que têm muita mais experiencia em linux do que eu.

Obrigado.
 
Back
Topo