Вот команда, которую вы попросили cron выполнить:
/usr/bin/mkdir /qwerty /usr/bin/touch file1
Это вызывает mkdir
с параметрами дерева: /qwerty
, /usr/bin/touch
,
и файл1
. Таким образом, mkdir
попытается создать их в качестве каталогов.
Вероятно, вы имели в виду выполнить их как две отдельные команды:
6 13 * * * /usr/bin/mkdir /qwerty
11 13 * * * /usr/bin/touch /qwerty/file1
Другой стиль сделал бы это как однострочник:
6 13 * * * /usr/bin/mkdir /qwerty && sleep 5m && /usr/bin/touch /qwerty/file1
Обратите внимание, что использование cron для одноразовых заданий странно; как указано в Прокомментируйте ваш вопрос, работа на работе будет иметь больше смысла.
Кроме того, это все равно не удастся, если пользователю не будет разрешено создавать
каталоги под /
.
Чтобы проверить обе переменные одновременно, вы можете объединить и проверить.
Вот та часть, которая меняется:
case $num1$num2 in
'' |*[!0-9]*)
echo "please enter a valid number"
exit
;;
Вы также можете использовать exit
для выхода сразу после печати сообщения об ошибке.
Используя bash, вы можете использовать регулярное выражение для проверки числа:
#! /bin/bash
while [ -z "$REPLY" ]; do
read -p "Enter a valid number: "
if ! [[ "$REPLY" =~ ^[0-9]+$ ]] ; then
echo Bad number: $REPLY
REPLY=
fi
done
echo A valid number: $REPLY
Программа продолжает считывать ввод до тех пор, пока переменная $REPLY
не будет установлена с помощью read
. Когда число совпадает с ^[0-9]+$
, цикл завершается.
Для этого можно определить пользовательскую функцию.
# func def.
isInt() {
case ${1-} in '' | *[!0-9]* ) return 1 ;; esac
return 0
}
# now use it as:
if isInt "$num1"; then
echo "$num1 is a valid integer"
else
echo "$num1 is not an integer"
fi
Обратите внимание, что case
использует подстановочные знаки, а не регулярные выражения для своей работы.