Я делаю метод создания настраиваемых заданий в диспетчере crontab, где он запрашивает у пользователя часы / мин / месяц / дату и т. Д., А затем создает первую половину команды crontab, используя *, когда это необходимо, или значение, заданное пользователем. Моя проблема связана с символом звездочки *. Особый персонаж вызывает нежелательное поведение. Мое решение состояло в том, чтобы использовать \* и попытаться удалить \ из завершенной строки после того, как она была собрана, но до того, как я добавлю командную часть. Я не могу понять, как удалить все \ из строки; ive пробовал $string//\ и $string//"\" и другие его варианты. Я также пробовал newstring=$("oldstring" | \ ) и его варианты. Первоначально я просто строил строку с * или переменной, содержащей его ($string$star$string). Также пробовал подход ${string}*${string}. Теперь я застрял в том, как удалить каждый \ из строки, которая выглядит примерно как *: 00 \* \* 09 \*

Весь метод таков:

echo "When would you like the job to occur? A for all"

echo "On which hour? A for every hour"
read hour

echo "On which minute? A for every minute"
read min
space=" "
if [ "$min" = "A" ]
then
minstring="Every minute"
minout="\*"
else
minstring=$min
minout=$min
fi

if [ "$hour" = "A" ]
then
hourstring="Every Hour"
hourout="\*"
else
hourstring=$hour
hourout=$hour
fi

timestring=$hourstring$space$minstring
frequency=$minout$space$hourout$space

echo "For which month 01-12. Or any other character for every month"
read month
monthout=$month
case $month in

01)
monthstring="January"
;;
02)
monthstring="February"
;;
03)
monthstring="March"
;;
04)
monthstring="April"
;;
05)
monthstring="May"
;;
06)
monthstring="June"
;;
07)
monthstring="July"
;;
08)
monthstring="August"
;;
09)
monthstring="September"
;;
10)
monthstring="October"
;;
11)
monthstring="November"
;;
12)
monthstring="December"
;;
*)
monthstring=" Every month "
monthout="\*"
;;
esac


echo "On partiular dates(date) or days of the week(dow) Or everyday(A)"
read choice
case $choice in
date)
echo "Which dates: "
read date


datestring="Date(s) ${date}"

frequency+="$date$space$monthout$space\*$space"
;;
dow)
echo "Which days. 1 for monday:"
read days
daystring="days ${days}"
frequency+="\*$space$monthout$space$days$space"
;;
A)
daystring="Every Day"
frequency+="\*$space$month\*$space"
;;
*)
echo "invalid input"
;;
esac

echo "Enter your command for: $timestring"
echo $monthstring
echo "On $daystring"
read command

fullcommand=$frequency$command
echo $fullcommand
0
Mike 19 Окт 2020 в 20:04

1 ответ

Лучший ответ
# example, trim with "tr"
str='00  \* \* 09 \*'
echo str \""$str"\"
trim=$(echo "$str" | tr -d '\134')
echo trim \""$trim"\"
1
Milag 19 Окт 2020 в 19:26