Я работаю в службе поддержки, и я использую этот скрипт для поиска информации, которую мне нужно все время на моей работе. Это экономит мне немного времени, и это было отличное обучение. Я довольно новичок в написании сценариев, и любые отзывы об этом скрипте будут хорошо восприняты. Мне бы очень хотелось помочь в этом цикле.Можно ли изменить эту петлю bash на регистр case?
Общая информация приветствуется.
# If more than one member in Array Ask for user input.
if [[ ${tLen} -gt '1' ]]; then
for ((i=0; i<${tLen}; i++));
do
# adding one so user selection starts at 1
# gobble up everything up to last back slash.
echo "$(($i + 1))) ${arr[$i]##*/}"
done
Можно ли превратить это в регистр случаев, чтобы защитить от ошибочного ввода пользователем? Также будет отличный способ обработки ошибочного ввода пользователем. Спасибо заранее за любые данные!
#!/bin/bash
# Asking for serial number
echo -e "Enter serial number:"
read SerialNumber
SerialNumberCount=${#SerialNumber}
if [[ ${SerialNumberCount} > "11" ]]; then
# If Serial is 12 or more characters, set the ModelSerial to four digits
ModelSerial=$(echo $SerialNumber|awk '{ print substr($0, length($0) - 3, length($0)) }')
else
# Set serial to three characters
ModelSerial=$(echo $SerialNumber|awk '{ print substr($0, length($0) - 2, length($0)) }')
fi
# Set ModelURL based on length of Serial number
# Creating temp dir/file trap for parsing html
TMPDIR=${TMPDIR:-/tmp}
temporary_dir=$(mktemp -d "$TMPDIR/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX") || { echo "ERROR creating a temporary file" >&2; exit 1; }
trap 'rm -rf "$temporary_dir"' 0
trap 'exit 2' 1 2 3 15
temp="$temporary_dir/$RANDOM-$RANDOM-$RANDOM"
# First downloaded html page
lookupUrl=$(echo "http://everymac.com/ultimate-mac-lookup/?search_keywords=${ModelSerial}")
curl -s -o $temp -L $lookupUrl
# Parsing partial links
webRslt=$(cat $temp | grep -o '<a href=['"'"'"][^"'"'"']*['"'"'"]' | sed -e 's/^<a href=["'"'"']//' -e 's/["'"'"']$//'|grep /systems* |grep ".html")
# Creating Array of partial links
arr=($webRslt)
# Length of Array
tLen=${#arr[@]}
# If more than one member in Array Ask for user input.
if [[ ${tLen} -gt '1' ]]; then
for ((i=0; i<${tLen}; i++));
do
# adding one so user selection starts at 1
# gobble up everything up to last back slash.
echo "$(($i + 1))) ${arr[$i]##*/}"
done
# Ask user for input
printf "\n"
echo "Please enter 1-${tLen} --> "
read -r sel
# Subtracting one from selection for correct Array member
ArraySel=$((sel - 1))
curl "${arr["$ArraySel"]/#/http://everymac.com}" -s -o "$temp"
else
# If array only has one member do this...
curl "${arr[0]/#/http://everymac.com}" -s -o "$temp"
fi
clear
# Parsing html for screen printing
get_value() { perl -nE 'say $1 if m!>\Q'"$1"'\E</td>\s*<td[^>]+>([^<]+)<!' <"$temp"; }
VAR1=$(get_value "Apple Model No:")
VAR2=$(get_value "Apple Order No:")
VAR3=$(get_value "Model ID:")
VAR4=$(get_value "Processor Speed:")
VAR5=$(get_value "Standard RAM:")
VAR6=$(get_value "Maximum RAM:")
VAR7=$(get_value "RAM Type:")
VAR8=$(get_value "Pre-Installed MacOS:")
VAR9=$(get_value "Maximum MacOS:")
VAR10=$(get_value "Minimum Windows:")
VAR11=$(get_value "Maximum Windows:")
VAR12=$(get_value "Original Price (US):")
tput setaf 2
printf "\033[1mRam & Apple Model Information Information (experimental beta)\033[m\n\n"
printf "Apple Model No:\t\\t\033[1m$VAR1\033[m\n"
printf "Apple Order No::\t\033[1m$VAR2\033[m\n"
printf "Model ID:\t\\t\033[1m$VAR3\033[m\n"
printf "Processor Speed:\t\033[1m$VAR4\033[m\n"
printf "Standard RAM:\t\\t\033[1m$VAR5\033[m\n"
printf "Maximum RAM:\t\\t\033[1m$VAR6\033[m\n"
printf "RAM Type:\t\\t\033[1m$VAR7\033[m\n"
printf "Pre-Installed MacOS:\t\033[1m$VAR8\033[m\n"
printf "Maximum MacOS::\t\t\033[1m$VAR9\033[m\n"
printf "Minimum Windows:\t\033[1m$VAR10\033[m\n"
printf "Maximum Windows:\t\033[1m$VAR11\033[m\n"
printf "Original Price (US):\t\033[1m$VAR12\033[m\n"
printf "\n\n"
printf "See URL below for more details."
printf "\n\n"
# Print page that is being parsed on screen.
if [[ ${tLen} -gt '1' ]]; then
tput setaf 2
echo "${arr[$ArraySel]/#/http://everymac.com}"
else
tput setaf 2
echo "${arr[0]/#/http://everymac.com}"
fi
printf "\n\n"
Я рекомендую вам использовать двойные кавычки в большем количестве мест. Расширения без кавычек претерпевают расщепление слов и расширение имени файла, что редко кто хочет. (Но, как ни странно, в некоторых местах, в которых вы используете двойные кавычки, я думаю, что одно кавычки будут более подходящими. Верно, что '' \ n "' является обратным слэшем, за которым следует 'n', но' '\ n'' - более простой способ выразить это.) – ruakh