Bash中一系列数字的用例
我正在尝试在Bash(Linux)中使用Bash中一系列数字的用例,bash,switch-statement,Bash,Switch Statement,我正在尝试在Bash(Linux)中使用case执行以下操作 如果X在460和660之间,则输出X信息 如果X在661和800之间,请执行其他操作 等等 这就是我现在所拥有的: case $MovieRes in [461-660]*) echo "$MovieName,480p" >> moviefinal ;; [661-890]*) echo "$MovieName,720p" >> moviefinal ;; [891-1200]*) ec
case
执行以下操作
如果X在460和660之间,则输出X信息
如果X在661和800之间,请执行其他操作
等等
这就是我现在所拥有的:
case $MovieRes in
[461-660]*) echo "$MovieName,480p" >> moviefinal ;;
[661-890]*) echo "$MovieName,720p" >> moviefinal ;;
[891-1200]*) echo "$MovieName,1080p" >> moviefinal ;;
*) echo "$MovieName,DVD" >> moviefinal ;;
esac
但不知何故,许多480p、720p或1080p的游戏都以DVD结尾。变量$MovieRes
是一个简单的列表,显示每行1到1200之间的数字。根据值,case
决定应用哪个“case”
我想知道如何实际使用
case
来实现这一点,因为在处理这样的范围时有点混乱。在bash中,可以使用算术表达式:(…)
if((461bashcase
语句不理解数字范围。它理解
以下方面应起作用:
case $MovieRes in
46[1-9]|4[7-9][0-9]|5[0-9][0-9]|6[0-5][0-9]|660) echo "$MovieName,480p" >> moviefinal ;;
66[1-9]|6[7-9][0-9]|7[0-9][0-9]|8[0-8][0-9]|890) echo "$MovieName,720p" >> moviefinal ;;
89[1-9]|9[0-9][0-9]|1[0-1][0-9][0-9]|1200) echo "$MovieName,1080p" >> moviefinal ;;
*) echo "$MovieName,DVD" >> moviefinal ;;
esac
但是,我建议您使用if-else语句,并与另一个答案中的数字范围进行比较。案例
不是解决此问题的正确工具。此答案仅用于解释目的。只是为了方便您按照自己的意愿颠覆案例,
您可以使用$(…)
中的案例1
$($MovieRes类似的问题,可能对某些人有用…随机附加的东西我刚刚尝试过,它检查它是否是一个整数,对我来说,我希望它有一个预设值,让用户更改它,如果他们输入了错误的数据,它设置为默认值
func_set_num_files(){
echo "How many files do you want to create? (input a number 1-10000)"
read X
# 1, is it a number, #2 is it within max range?
if [[ $X != *[!0-9]* ]]; then
if ((1<=X && X<=10000)) ;then
echo "NUM_FILES=$X"
NUM_FILES=$X
else
echo "Invalid input, setting to default value [ $NUM_FILES ].";sleep 3
fi
else
echo "Invalid input, non-numeric values entered, setting to default value [ $NUM_FILES ].";sleep 3
fi
}
我正在寻找最简单的解决方案,发现很难使用带有数字范围的case语句
最后,我为zsh找到了一个非常简单的解决方案:
#!/usr/bin/zsh
case "${var}" in
<0-5461>)
printf "${var} is between 0 and 5461"
;;
<5462-10922>)
printf "${var} is between 5462-10922"
;;
esac
#!/bin/bash
case $((
(var >= 0 && var <= 5461) * 1 +
(var > 5462 && var <= 10922) * 2)) in
(1) printf "${var} is between 0 and 5461";;
(2) printf "${var} is between 5461 and 10922";;
esac
!/usr/bin/zsh
中的大小写“${var}”
)
printf“${var}介于0和5461之间”
;;
)
printf“${var}介于5462-10922之间”
;;
以撒
对于Bash:
#!/usr/bin/zsh
case "${var}" in
<0-5461>)
printf "${var} is between 0 and 5461"
;;
<5462-10922>)
printf "${var} is between 5462-10922"
;;
esac
#!/bin/bash
case $((
(var >= 0 && var <= 5461) * 1 +
(var > 5462 && var <= 10922) * 2)) in
(1) printf "${var} is between 0 and 5461";;
(2) printf "${var} is between 5461 and 10922";;
esac
!/bin/bash
个案$(
(var>=0&&var 5462&&var“但不知何故,其中有许多”…我不太确定这里指的是哪些<代码>的<代码>的。你能澄清一下吗?谢谢你。现在问题出在这里,你的答案正确地回答了我想要的,但正如你提到的,这不是正确的方法。正确/更简单的方法是使用Kev的答案。我应该:1.接受你的答案吗作为正确答案,给Kev a+1或2。我应该接受Kev的正确答案,给你a+1吗?我问,因为你们两个都回答正确。IMO Kev的答案应该被接受,因为这是你(和任何其他来到这个网站的人)应该使用的。但我不介意a+1!谢谢:)感谢您提出了一种在case
语句中声明数字范围的方法,而不仅仅是建议它需要是if
:-)嗯,看起来
中的案例1本质上等于
中的案例true?也就是说,如果公式返回true,则满足案例要求?这是案例
的一个很酷的用法!您的zsh解决方案正是我想要的!非常感谢!
#!/bin/bash
case $((
(var >= 0 && var <= 5461) * 1 +
(var > 5462 && var <= 10922) * 2)) in
(1) printf "${var} is between 0 and 5461";;
(2) printf "${var} is between 5461 and 10922";;
esac