Problema com sintaxe de exclusão de conta script -- acos campo com command-line campo com bash campo com script camp apple Relacionado O problema

Problem with scripted account deletion syntax


1
vote

problema

português

Estou trabalhando em um módulo de script de limpeza de contas que pode lidar com as contas ocultos e unilindas que estamos criando em massa em novos sistemas de macuz.

Nós mantivemos a lógica simples de começar.

No entanto eu continuo recebendo um erro: linha 4: [: falta `] '

Eu tenho o espaço ... o que estou perdendo? Eu tentei verificações de sintaxe e passa ao mustro.

  #!/bin/bash USERNAME=administrator  if [ dscl . -list /Users | grep -v '^_' | grep $USERNAME ];     then     echo "Deleting user account $USERNAME"     dscl . -delete "/Users/$USERNAME" else     echo "The admin account $USERNAME does not exist here" fi  if [ -d "/$USERPATH/$USERNAME" ];     then     echo "Deleting leftover user account folder $USERPATH/$USERNAME"     rm -rf $USERPATH/$USERNAME fi  if [ -d "/Users/$USERNAME" ];     then     echo "Deleting leftover user account folder /Users/$USERNAME"     rm -rf /Users/$USERNAME] fi    
english

I'm working on an account cleanup script module that can handle the hidden and unhidden accounts we're creating in bulk on new MacOS systems.

We've kept the logic simple to start.

However I keep getting an error: line 4: [: missing `]'

I have the space...what am I missing? I tried syntax checks and it passes muster.

#!/bin/bash USERNAME=administrator  if [ dscl . -list /Users | grep -v '^_' | grep $USERNAME ];     then     echo "Deleting user account $USERNAME"     dscl . -delete "/Users/$USERNAME" else     echo "The admin account $USERNAME does not exist here" fi  if [ -d "/$USERPATH/$USERNAME" ];     then     echo "Deleting leftover user account folder $USERPATH/$USERNAME"     rm -rf $USERPATH/$USERNAME fi  if [ -d "/Users/$USERNAME" ];     then     echo "Deleting leftover user account folder /Users/$USERNAME"     rm -rf /Users/$USERNAME] fi 
           

Lista de respostas

0
 
vote
vote
Melhor resposta
 

[ (e [[ ) Espere uma expressão, não um comando; Então você não pode executar comandos diretamente dentro de um teste.

Quando você colocar um tubo em sua condição termina a avaliação iniciada com [ que faz ] para ser tratado como um argumento para o último abcdefghijklmn4 .

tente colocar sua condição dentro $() como assim:

  if [ $(dscl . -list /Users | grep -v '^_' | grep $USERNAME) ];    

Dessa forma, a expressão (incluindo todos os tubos) será executada primeiro e devolve seu código de saída a ser usado em sua avaliação.

 

[ (and [[) expect an expression, not a command; so you can't directly run commands inside a test.

When you put a pipe in your condition it terminates the evaluation started with [ which makes ] to be treated as an argument to the last grep.

Try putting your condition inside $() like so:

if [ $(dscl . -list /Users | grep -v '^_' | grep $USERNAME) ]; 

That way the expression (including all the pipes) is going to be executed first and return its exit code to be used in your evaluation.

 
 
0
 
vote

Na sua declaração canalizada, o status de saída do último grep é usado e você não precisa dos suportes de teste. Você também pode eliminar o primeiro grep.

  if dscl . -list  /Users | grep -w "$username" then     .........     ......... else     ......... fi    

Por favor, teste antes de usar.

 

In your piped statement only the exit status of the last grep is used and you do not need the test brackets. You can also eliminate the first grep.

if dscl . -list  /Users | grep -w "$username" then     .........     ......... else     ......... fi 

Please test before using.

 
 
 
 

Perguntas relacionadas

1  Como executar o script do shell no lançamento do aplicativo?  ( How to run shell script upon application launch ) 
Não tenho certeza se isso pertence aqui ou no superusuário, mas é o Mac específico, então eu vou com aqui. Eu escrevi um script Ruby que edita o arquivo de ...

8  Qual é a maneira mais fácil de automatizar o login em um site?  ( Whats the easiest way to automate logging into a website ) 
Há este site que eu preciso acessar cerca de dez minutos. E aparentemente foi projetado em 1993, por sádicos. Não há nenhuma caixa de seleção "lembrar de mim ...

5  Um método programático para desativar todos os serviços de compartilhamento?  ( A programmatic method for disabling all sharing services ) 
Estou buscando um método programático para desabilitar todos os serviços de compartilhamento em um Mac. Minha preferência é para um AppleScript ou um script d...

4  Como criar um serviço Automator para executar um script em todos os arquivos em uma pasta  ( How to create an automator service to run a script on all files in a folder ) 
Eu quero criar um serviço usando o Automator para executar um script shell em todos os arquivos em uma pasta, digamos excluir todos os arquivos de log. O que ...

2  Contraparta MacOS do arquivo de lote de inicialização do Windows [duplicado]  ( Macos counterpart of windows startup batch file ) 
. Esta pergunta já tem uma resposta aqui : Como executar um comando na inicialização ...

8  Ligue de volta ao meu Mac por meio de um script ou linha de comando  ( Turn on back to my mac via a script or command line ) 
O software VPN que eu uso para o trabalho ( IPsecuritas ) Requer que eu desligue de volta ao meu Mac para começar Conexão, então eu freqüentemente desligue de...

2  Automator para executar o script do shell com um arquivo de texto de entrada, copie-o para diretório específico  ( Automator to execute shell script with an input text file copy it to specific d ) 
Estou simplificando fazendo um arquivo .deb com automator. Eu atualmente tenho um script de shell que faz algumas ações simples - . Pergunte ao usuário para...

9  Como faço para modificar o Word 2011 para Mac para que eu possa ver alterações rastreadas e notas simultaneamente?  ( How do i modify word 2011 for mac so i can see tracked changes inline and notes ) 
background: No Word 2011 para o Mac, é possível visualizar alterações rastreadas Inline - isto é, veja as alterações feitas na tela dentro do próprio te...

1  Como posso script o disco de inicialização em MacOS Catalina sem desabilitar o SIP?  ( How can i script the bootup disk in macos catalina without disabling sip ) 
Estou no Catalina 10.15.6. Anteriormente, você pode escrever scripts de shell que definiriam o volume de inicialização e reiniciariam o Mac, usando ABCDEFG...

1  Problema com sintaxe de exclusão de conta script  ( Problem with scripted account deletion syntax ) 
Estou trabalhando em um módulo de script de limpeza de contas que pode lidar com as contas ocultos e unilindas que estamos criando em massa em novos sistemas ...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.