在 linux sh 脚本中删除字符串中的特定字符
removing a particular character in a string in linux sh scripts
我正在 crontab 管理器中制作自定义作业创建方法,它提示用户输入 hours/min/month/date 等,然后在需要时或用户给定值时使用 * 创建 crontab 命令的前半部分。我的问题是星号 * 字符。作为一个特殊角色会导致不受欢迎的行为。我的解决方案是使用 \*
并尝试在完成的字符串放在一起之后和添加命令部分之前从完成的字符串中删除 \
。我不知道如何从字符串中删除所有 \
;我试过 $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
# example, trim with "tr"
str='00 \* \* 09 \*'
echo str \""$str"\"
trim=$(echo "$str" | tr -d '4')
echo trim \""$trim"\"
我正在 crontab 管理器中制作自定义作业创建方法,它提示用户输入 hours/min/month/date 等,然后在需要时或用户给定值时使用 * 创建 crontab 命令的前半部分。我的问题是星号 * 字符。作为一个特殊角色会导致不受欢迎的行为。我的解决方案是使用 \*
并尝试在完成的字符串放在一起之后和添加命令部分之前从完成的字符串中删除 \
。我不知道如何从字符串中删除所有 \
;我试过 $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
# example, trim with "tr"
str='00 \* \* 09 \*'
echo str \""$str"\"
trim=$(echo "$str" | tr -d '4')
echo trim \""$trim"\"