回声名称不是数字以防(选择)。 #bash
Echo name not a number in case (choice). #bash
我需要回显 - 选择 - 从案例到 csv 文件。
当我从下面回显 varSel 时,我只得到数字,我想要“名称”(在本例中为 sale 或 return)。
while 循环在这里只是为了缩小用户的选择范围。它是更大脚本的一部分,但截至目前我只需要这部分工作,其他任何部分都可以。
#! /bin/bash
while true; do
echo "1) sale"
echo "2) return"
read -p "Choose your options: " varSel
case ${varSel} in
1) var1="sale"; break;;
2) var1="return"; break;;
*) echo "Choose options between 1 and 2";;
esac
done
echo $varSel >> logfile.csv
正如评论中已经提到的另一位用户,您应该在脚本的最后一行 echo "$var1" >> logfile.csv
而不是 echo $varSel >> logfile.csv
。
另一种更复杂的方法是使用包含可能选择的数组作为驱动其他所有内容的基础(为了说明,我添加了更多选择):
#!/bin/bash
choices=("sale" "return" "somethingelse" "hello" "world")
while true; do
# List possible choices
for ((i=0; i < ${#choices[@]}; i++)); do
echo "$((i+1))) ${choices[i]}"
done
# Prompt user to choose
read -p "Choose your options: " varSel
# Check if choice is valid, break loop if so
# (varSel needs to be: non-empty, an integer and within range of possible choices)
if [[ "${varSel}" != "" && "${varSel}" != *[!0-9]* ]] && (( ${varSel} >= 1 && ${varSel} <= ${#choices[@]} )); then
choice="${choices[varSel-1]}"
break
else
echo "Choose options between 1 and ${#choices[@]}"
fi
done
echo "${choice}" >> logfile.csv
这可以用作任意数量选择的通用模板。这里有一件棘手的事情是跟踪选择数字与数组索引(选择是 1..n,数组索引是 0..n-1)。
您正在重新发明内置 select
命令:
#!/usr/bin/env bash
PS3="Choose your options: "
select choice in sale return; do
[[ -n $choice ]] && break
done
echo "$choice" >> logfile.csv
我需要回显 - 选择 - 从案例到 csv 文件。 当我从下面回显 varSel 时,我只得到数字,我想要“名称”(在本例中为 sale 或 return)。 while 循环在这里只是为了缩小用户的选择范围。它是更大脚本的一部分,但截至目前我只需要这部分工作,其他任何部分都可以。
#! /bin/bash
while true; do
echo "1) sale"
echo "2) return"
read -p "Choose your options: " varSel
case ${varSel} in
1) var1="sale"; break;;
2) var1="return"; break;;
*) echo "Choose options between 1 and 2";;
esac
done
echo $varSel >> logfile.csv
正如评论中已经提到的另一位用户,您应该在脚本的最后一行 echo "$var1" >> logfile.csv
而不是 echo $varSel >> logfile.csv
。
另一种更复杂的方法是使用包含可能选择的数组作为驱动其他所有内容的基础(为了说明,我添加了更多选择):
#!/bin/bash
choices=("sale" "return" "somethingelse" "hello" "world")
while true; do
# List possible choices
for ((i=0; i < ${#choices[@]}; i++)); do
echo "$((i+1))) ${choices[i]}"
done
# Prompt user to choose
read -p "Choose your options: " varSel
# Check if choice is valid, break loop if so
# (varSel needs to be: non-empty, an integer and within range of possible choices)
if [[ "${varSel}" != "" && "${varSel}" != *[!0-9]* ]] && (( ${varSel} >= 1 && ${varSel} <= ${#choices[@]} )); then
choice="${choices[varSel-1]}"
break
else
echo "Choose options between 1 and ${#choices[@]}"
fi
done
echo "${choice}" >> logfile.csv
这可以用作任意数量选择的通用模板。这里有一件棘手的事情是跟踪选择数字与数组索引(选择是 1..n,数组索引是 0..n-1)。
您正在重新发明内置 select
命令:
#!/usr/bin/env bash
PS3="Choose your options: "
select choice in sale return; do
[[ -n $choice ]] && break
done
echo "$choice" >> logfile.csv