Como usar um argumento opcional?

1

Estou escrevendo este script para funcionar como um rascunho rápido. Ele abre meu editor de texto com data e hora, para que eu possa inserir algum texto de rascunho para salvar rapidamente.

1. Primeiro, gostaria de acrescentar a data e a hora no início do arquivo, em vez de no final, como >> $file . Mas eu acho que não é tão fácil, então essa não é minha prioridade.

2. Eu defini um argumento $1 . Se eu tiver poucas palavras para inserir, acredito que seja melhor executar draft "foo foo" em vez de abrir o editor para escrever apenas algumas palavras.

Bem, está funcionando, mas com o argumento, a última linha não é necessária. Então eu gostaria de fazer uma linha condicional. Se eu não passar nenhum argumento, abra o editor; mais nenhum.

Alguma ajuda para melhorar meu roteiro?

#!/bin/bash
file=rascunho
folder=/home/$USER/
#linha=$(wc -l < $file)
content=$1
#rm $folder$file
printf "\n\n" >> $file
#echo " " >> $file
echo "------< $(date "+%b %d, %Y - %H:%M:%S") >------" >> $file
echo "$1" >> $file
exec leafpad  $file
    
por Sigur 19.01.2013 / 02:19

2 respostas

8

Você pode usar if para verificar. Por exemplo, você pode fazer algo assim em vez das duas últimas linhas do script acima:

if [ -n "$1" ]; then
  echo "$1" >> $file
else
  exec leafpad $file
fi

Isso diz: se o primeiro argumento não for uma string vazia (é o que faz o -n test), execute echo , senão execute leafpad .

Você pode ler mais sobre isso aqui:

Espero que isso ajude.

    
por 19.01.2013 / 02:33
1

Para ser mais genérico, use "$@" em vez de "$1" - isso permite que você escreva

draft use many words without quoting.
#!/bin/bash
file=rascunho
printf "\n\n------< %s >------\n" "$(date "+%b %d, %Y - %T")" >> $file
# if any arguments were given, write them to the file, else edit the file
if [[ $# -gt 0 ]]; then
    echo "$@" >> $file
else
    exec leafpad $file
fi

Para escrever uma linha no início do arquivo, você pode usar uma construção de agrupamento:

{ echo "first line"; cat $file; } > temp && mv temp $file
    
por 19.01.2013 / 17:08