さて、私はこの問題を抱えています。問題は、アスタリスク(*)をパラメーターとして使用して、ifステートメントの正規表現と比較することです。正規表現は、アスタリスクが使用されるまで正常に機能します。ご存知のように、パラメーターとして使用すると、ファイルシステム全体に拡張されます。コマンドshopt -s nullglob
を試しましたが、機能していないようです。これが私のスクリプトの内容です
#!/bin/bash
#an array of regex expresion to match basic crontab time values
declare -a regex_array=('^(\*|([0-9]|[0-5][0-9]))$'
'^(\*|([0-9]|[0-1][0-9]|2[0-3]))$'
'^(\*|([1-9]|0[1-9]|[1-2][0-9]|3[0-1]))$'
'^(\*|([1-9]|0[1-9]|1[0-2]))$'
'^(\*|[0-6])$')
#another array for output errors
declare -a value_cront=('minutes'
'hours'
'days'
'month'
'day of the mont')
#initializing the counter
count_i=0
#a loop that will exit until a false condition (exit codes)
while :
do
#this loop will check the 5 time parameters with a regex expresion
for count_param in "$@"
do
if [[ "$count_param" =~ ${regex_array["$count_i"]} ]]; then
exit 0
else
echo "The parameter ${value_cront["$count_i"]} does not match"
exit 1
fi
((count_i++))
done
done
#!/bin/bash
set -o noglob
set -- $@
# Regex to match basic crontab time/date values.
a=('^(\*|([0-9]|[0-5][0-9]))$' \
'^(\*|([0-9]|[0-1][0-9]|2[0-3]))$' \
'^(\*|([1-9]|0[1-9]|[1-2][0-9]|3[0-1]))$' \
'^(\*|([1-9]|0[1-9]|1[0-2]))$' '^(\*|[0-6])$')
# Time/date field names.
b=('minute' 'hour' 'day of the month' 'month' 'day of the week')
if [[ $# -ne 5 ]]; then
echo "Invalid number of time/date fields."
exit 1
fi
for c in $@; do
if [[ ! $c =~ ${a[$d]} ]]; then
echo "The time/date field '${b[$d]}' does not match."
exit 1
fi
((d++))
done
echo "Cron ok!"