Если вы компилируете на самой целевой машине, uname -m
даст вам то, что вы хотите на большинстве машин. например. на моей 64-битной -настольной машине:
$ uname -m
x86_64
Это не скажет вам явно, является ли машина 64-битной или 32-битной. Это просто строка, которую вам придется интерпретировать (, например. с серией операторов if/then
или оператором case
).
Вот (очень грубый )пример в sh:
machine=$(uname -m)
bits=0
case "$machine" in
*64*) bits=64 ;;
*[3-6]86*) bits=32 ;;
*armv7*) bits=32 ;; # replace with a pattern to match your 32-bit android cpu
*armv8*) bits=64 ;; # replace with a pattern to match your 64-bit android cpu
esac
[ "$bits" = 0 ] && echo "Unknown machine type" && exit 1
Попробуйте следующий код.
#!/bin/sh
cd /my/path
while true; do
Hrs=`date "+%H"`
if [ "$Hrs" -ge 17 ] && [ "$Hrs" -le 23 ]; then
if [ -f tt.txt ]; then
echo "File Found" | mail -s "This is the subject" <email address>
fi
fi
sleep 60
done
Я проверил весь скрипт, кроме почтовой части. Все остальное работает, надеюсь, почта тоже. Ваше здоровье.
Существует точный тест (во всех оболочках ), чтобы увидеть, существует ли файл, является ли он реальным файлом, доступен ли он для чтения и т. д. Следует избегать использования ls.
.. Он будет отправлять сообщение об ошибке каждый раз, когда файла нет.
.. Каждый раз запускает внешний процесс.
.. Это также обнаружит каталог, именованный канал, устройство и т. д.
Если вы собираетесь отправить электронное письмо, вы также можете указать имя найденного файла.
Было бы лучше объявить имя файла один раз как переменную оболочки. А еще лучше сделать его аргументом скрипта, чтобы его можно было использовать для разных файлов без изменений.
Сон 5 отличается от сна 60.