Como posso usar o loop para fazer um novo FILE em cada diretório / home, exceto / home / lost + found [closed]

0
#!/bin/sh
for file in /home/*
do
if [ "{$file}" != "/home/lost+found" ]
then
    touch $file/FILE1
done

O que eu quero alcançar é que eu passe por todos os diretórios / home / e faça em cada um deles um FILE exceto em / home / lost + found . O que estou fazendo errado?

    
por ImTrying 17.06.2018 / 10:38

1 resposta

1

Não muito, você está perdendo o fi que finaliza a instrução if e {$file} expande para {/home/somedir} , com chaves literais. A expansão de parâmetro com chaves é ${file} , ou seja, o sinal de dólar sai de fora das chaves.

Além disso, o padrão /home/* corresponderá a todos os arquivos (não apenas aos diretórios), portanto, você obterá erros de touch , se houver algum. Pode não haver muitos em /home , mas é fácil alterar o padrão para /home/*/ , que deve corresponder apenas aos diretórios. a barra de tralha será então parte da variável, então leve isso em conta na comparação. (Como alternativa, teste também [ -d "$file" ] .)

Além disso, em geral, você deseja citar "$file" . Ou talvez dir seja mais apropriado aqui.

#!/bin/sh
for dir in /home/*/ ; do
    if [ "$dir" != "/home/lost+found/" ] ; then
       touch "$dir/FILE1"
    fi
done
    
por 17.06.2018 / 10:55