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
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"
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.
Senão, se você tiver controle sobre a entrada, poderá dizer:
121212 "Jan\ 14" 00 12
Então você não usa -r
!
Tags bash shell shell-script