Parece que o que você está procurando é a capacidade de testar se uma variável recebeu ou não um valor. Isso pode ser feito usando os operadores de comparação de string Bash. Estes operadores estão documentados em várias referências comuns diferentes, por exemplo:
-
Guia do Bash para Iniciantes: Capítulo 7 - Declarações Condicionais
-
Guia avançado de script de script: Seção 7.3 - Outros operadores de comparação
Em particular, você pode usar o if [ -n "${string}" ]
para testar strings não nulas. Adaptar seu script para usar este teste pode resultar em algo como o seguinte:
#!/bin/bash
find /var/log/nginx/ -type f ( -iname "access.log*" ! -iname "access.log*.gz" ) -exec cat {} + >> output.txt
echo enter the file name read file1
echo "enter varible 1"
read var1
echo "enter varible 2"
read var2
if [[ -n "${var2}" ]]; then var2=""; fi
grep -w $var1 output.txt | grep $var2 | cut -d' ' -f1,4,12,25 > $file1
grep -w $var1 output.txt | grep $var2 | sed 's#.*(aff_id=[[:digit:]]\+).*(off_id=[[:digit:]]\+).*(trans_id=[[:alnum:]]\+);.*# #' > out2.txt
paste -d' ' $file1 out2.txt > out3.txt
rm -rf output.txt
rm -rf $file1
Dito isso, não acho que isso ajude a resolver seu problema. Para evitar seus erros grep
, basta citar as variáveis, por exemplo, %código%. Aqui está o seu script com as variáveis citadas:
#!/bin/bash
find /var/log/nginx/ -type f ( -iname "access.log*" ! -iname "access.log*.gz" ) -exec cat {} + >> output.txt
echo enter the file name read file1
echo "enter varible 1"
read var1
echo "enter varible 2"
read var2
if [[ -n "${var2}" ]];
var2=""
fi
grep -w "${var1}" output.txt | grep "${var2}" | cut -d' ' -f1,4,12,25 > $file1
grep -w "${var1}" output.txt | grep "${var2}" | sed 's#.*(aff_id=[[:digit:]]\+).*(off_id=[[:digit:]]\+).*(trans_id=[[:alnum:]]\+);.*# #' > out2.txt
paste -d' ' $file1 out2.txt > out3.txt
rm -rf output.txt
rm -rf $file1
Uma explicação de por que você precisa citar as variáveis em suas expressões grep -w "${var1}" output.txt
pode ser encontrada na Guia do Bash para Iniciantes: Seção 3.4.8 - Divisão do Word :
The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting. [...] Explicit null arguments ("""" or "''") are retained. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. If a parameter with no value is expanded within double quotes, a null argument results and is retained.