Argumento de duas palavras no shell script

6

Eu tenho um problema com um script de shell. É suposto ler argumentos: índice, data, hora1 (o começo do intervalo), tempo2 (o fim do intervalo). Ele deve contar quantas vezes o usuário (índice) registrou a data especificada no intervalo de tempo time1-time2.

Por exemplo: 121212 "14 de janeiro" 00 12

Isso funciona, mas eu tenho um problema com a data do argumento. Não reconhece como um argumento. Ele divide em Jan e 14 ", o que é um grande problema. Eu tenho procurado na internet por algumas horas, mas não consegui encontrar a solução em nenhum lugar. Aqui está o meu código:

#!/bin/bash

read user date time1 time2
list='last | grep ^$user.*$date | awk '{ print $7 }''

start=$time1
end=$time2

echo "start $start"
echo "end $end"
count=0
for el in $list ;
do
      login=$el
echo "najava $najava"

checkIf(){
        current=$login
         [[ ($start = $current || $start < $current) && ($current = $end || $current < $end) ]]
}
if checkIf; then
        count='expr $count + 1'
        ip='last | grep ^$user.*$date.*$login | awk '{ print $3 }''
        echo $ip >> address.txt
else
        continue
fi
  done
  echo "The user has logged in $count times in the given time interval"
    
por Spirit_Scarlet 14.01.2015 / 15:51

2 respostas

6

Tente usar $ 1, $ 2, $ 3, $ 4, ... para argumentos de linha de comando (em vez de usar leitura)

Chame seu script usando:

./script.sh 121212 "Jan 14" 00 12
    
por 14.01.2015 / 15:56
1

Se por algum motivo precisar / quiser read , pode dizer:

read -r user mm dd time1 time2

date="$mm $dd"

Usar -r geralmente é uma boa ideia - mesmo quando um acha que não é necessário.

The -r option to read prevents backslash interpretation (usually used as a backslash newline pair, to continue over multiple lines). Without this option, any backslashes in the input will be discarded. You should almost always use the -r option with read.

link

Senão, se você tiver controle sobre a entrada, poderá dizer:

121212 "Jan\ 14" 00 12

Então você não usa -r !

    
por 14.01.2015 / 16:08