Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将这个bash循环更改为case语句?_Bash_Loops_Switch Statement - Fatal编程技术网

是否可以将这个bash循环更改为case语句?

是否可以将这个bash循环更改为case语句?,bash,loops,switch-statement,Bash,Loops,Switch Statement,我在一个帮助台工作,我使用这个脚本来查找我在工作中一直需要的信息。 这节省了我一点时间,这是一次很好的学习经历。我对脚本编写非常陌生,关于这个脚本的任何反馈都会得到很好的接受。我真正需要帮助的是这个循环 一般反馈也欢迎 # If more than one member in Array Ask for user input. if [[ ${tLen} -gt '1' ]]; then for (( i=0; i<${tLen}; i++ )); do # adding

我在一个帮助台工作,我使用这个脚本来查找我在工作中一直需要的信息。 这节省了我一点时间,这是一次很好的学习经历。我对脚本编写非常陌生,关于这个脚本的任何反馈都会得到很好的接受。我真正需要帮助的是这个循环

一般反馈也欢迎

# 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"

老实说,我不完全理解你的问题;但听起来您需要的是中描述的select命令,它为用户提供了一个可供选择的编号项目菜单。在您的情况下,您可以写:

if (( ${#arr[@]} == 1 )) ; then
    url="${arr[0]}"
else
    # present the user with all elements of the array, numbered,
    # and store the selected element in $url:
    select url in "${arr[@]}" ; do break ; done
fi
curl "${url/#/http://everymac.com}" -s -o "$temp"

是的,这就是我的意思。。。非常感谢。我会在有机会的时候测试这个。我想我把另一门编程课上的a学期弄混了。。。我建议你在更多的地方使用双引号。不带引号的参数扩展会经历分词和文件名扩展,这很少是任何人想要的。但有趣的是,在一些使用双引号的地方,我认为单引号更合适。确实\n是一个反斜杠,后跟n,但是“\n”是一个更直接的表达方式。