В целом я нашел хранение строгого, описательного, соглашения о присвоении имен быть очень полезным. Вам не нужно расширение в Unix, но я сохранил бы его по двум причинам:
1) Если тот файл будет когда-либо читаться машиной окон, будет легче открыться, чем попытка найти "открытым с...".
2) Расширения помогают, Вы, пользователь, выясняете то, что делает файл. В нашей лаборатории: .txt = текстовый файл .sgi = irix скомпилированный двоичный файл .linux = Linux скомпилировал двоичный файл
Если необходимо использовать более старые машины Unix (мы все еще используем IRIX), имейте в виду, что возврат каретки отличается в *, отклоняют машины, и программы не могли бы ценить, при попытке открыть файл с возвратами каретки окон.
В ударе переменные являются по существу всеми строками (или массивы строк). Но команда (команды) [] и [[]] имеет несколько операторов, которые рассматривают аргументы как целые числа: - лейтенант - le-eq-ne - GE-gt
Так, Вы могли использовать:
for dir in ${LIST_OF_DIRECTORIES}; do
if [[ $(/exc/list q ${dir}) -gt 200 ]]; then
echo "${dir}"
fi
done > /tmp/StoryCount.$(date +%y%m%d)
Обратите внимание что, если какое-либо имя каталога будет иметь пробел, то это не будет работать как есть.
Кроме того, другое использование ответов &&
вместо явного if
для условного выражения. Они функционируют то же для отдельных операторов, и я склонен использовать &&
для моих собственных сценариев, но в зависимости от того, кто будет поддерживать сценарий, я склонен быть более подробным/явным.
Можно сделать это:
num=$(/exc/list q show.today1.rundown) #store command output in num
#sanitize num so the comparison doesn't break:
num=${num//\.[0-9]/} #remove numbers after a decimal point
num=${num//[^0-9]/} #remove any non-digit character
#if num is greater than 200 print it to a temporary file:
[ "$num" -gt 200 ] && printf "%d\n" "$num" > "/tmp/StoryCount.$(date)"
Это, конечно, принимает это num
никогда не может быть отрицательным; который довольно безопасен, если Вы используете его для подсчета чего-то.
Вы могли сохранить свои 23 каталога в массиве в ударе как так:
$ dirs=(show.today1.rundown show.today2.rundown)
-or-
$ dirs=(\
show.today1.rundown \
show.today2.rundown \
)
Затем цикл через них как так:
$ for dir in "${dirs[@]}"; do echo "$dir";done
show.today1.rundown
show.today2.rundown
Вы могли затем соединиться /exc/list
управляйте в для цикла как так:
dateStamp=$(date +"%F_%T")
for dir in "${dirs[@]}"; do
cnt=$(/exc/list q $dir)
[ "$cnt" -gt 200 ] && printf "%d\n" "$cnt"
done | tee "/tmp/StoryCount.$dateStamp"
[[
использование поддержек>
вместо-gt
. Вам только нужно-gt
если Вы используете[
потому что>
был бы интерпретирован как перенаправление. – Joseph R. 26.08.2013, 21:16((...))
. – Joseph R. 26.08.2013, 21:22if [[ $(/exc/list q show.today1.rundown|wc -l) -gt 200 ]]; then echo "Caution: Today1 rundown has "$(/exc/list q show.today1.rundown|wc -l)" stories in it. Check it out." > /tmp/StoryCount.$date fi
Какие-либо мысли? – Dan Jensen 30.08.2013, 18:47