2016-05-17 3 views
-4

Этот скрипт запускает запрос для получения списка дат и запускает два других запроса для этих дат. Затем сравнивает, какой из них является меньшим из чисел, и умножает его на 2. Затем записывает в файл и суммирует их. Пожалуйста, предложите улучшения. Также проверяет 0 номеров.Как оптимизировать следующий скрипт

#!/bin/bash 

1>output.txt 

today=$(date +"%Y%m%d") 
FirstOfTheMonth=$(date -d "--$(($(date +%-d)-1)) day" `enter code here`+"%Y%m%d") 

echo "XXXX activity report on daily and cumulative monthly `enter code here`basis " 
#query that outputs dates to a file 
SQL query > list 
#for each date I run 2 queries 
for i in `cat list`;do 
a1=SQL query; 
b1=SQL query; 
# I compare to find out which one is the smaller number and `enter code here`multiply it by 2 

buy=${a1#-} 
sell=${b1#-} 
echo "XXX report for $yesterday month = $i " 

echo "Buy $buy" 
echo "Sell $sell" 

if [ "$buy" -lt "$sell" ]; 
then DayNumber=$[buy * 2]; 
else DayNumber=$[sell * 2]; 
fi; 
#I write all the numbers to a file since I have to sum them 
MonthNumber=`awk '{ sum += $1 } END { print sum }' `enter `enter code here`code here`DayNumber$i` 
echo "Day Number $DayNumber" 
echo "$DayNumber$i $MonthNumber$1 $yesterday" >> DayNumber$i 

echo "Day Number since $FirstOfTheMonth $MonthNumber$1" 
echo --------------------------------------------------------------------------------------- 
done 
/usr/bin/mail -s "XXXX report $today" [email protected] < `enter code here`output.txt 
+2

Если код работает так, как вы ожидаете, и вы просто хотите улучшить его, опубликуйте его на [codereview.se]. –

+0

Кроме того, если вы говорите об оптимизации производительности, мы хотим, чтобы вы (1) конкретно указали, что вы хотите оптимизировать, и удалите весь код, не имеющий отношения к этой вещи; и (2) укажите, какую версию bash вы планируете (для математики даты большие усовершенствования самого интерпретатора bash, потенциально позволяющие вам прекратить использовать дату GNU в пользу использования встроенных функций), были выпущены в 4.2). –

+0

Кроме того, все подстановки «введите код здесь» или «SQL-запрос» означают, что то, что вы публикуете здесь, не является допустимым MCVE, поскольку оно не является полным или проверяемым; см. http://stackoverflow.com/help/mcve. –

ответ

0

Вы, скорее всего, слезая голоса, сделать до размера кода, отсутствие ясности в отношении того, что вы хотите, не проявляя усилия, чтобы получить такой результат по своему усмотрению, и очень рудиментарные ошибок в читаемости коды, что может быть исправлена ​​с помощью веб-поиска для учебника. В Google есть руководство по стилю оболочки, которое вы должны прочитать.

Если вы перенаправляете stdout в файл, вы, вероятно, работаете автономно. Это означает, что вы также должны перенаправлять stderr. exec &>output.txt

Первый из month-- не знаю, почему вы не просто делать это FirstOfTheMonth=$(date +%Y%m1)

Ради Пита, отступа! Это заставляет меня хотеть бить сценаристов. Кроме того, не используйте i, если это не очень маленький цикл. Используйте переменную, которая что-то значит.

while read -rd' ' month; do 
    some commands 
    if [[ $buy -lt $sell ]]; then 
     do this thing here 
    fi 
done 

Bash не является терминалом с половиной двоеточием, вам не нужен один в конце строки. Используйте interan [[]] над externam []. Не указывайте переменную (например, «купить»), чтобы выполнить числовое сравнение (например, -lt). Держите его тогда на той же строке, как если бы ... он не предназначен для других целей, кроме как сделать его более читаемым.

Смежные вопросы