Lui*_*ado 21 bash switch-statement
我试图case在Bash中使用(在Linux中).
如果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
Run Code Online (Sandbox Code Playgroud)
但不知何故,480p,720p或1080p的许多都以DVD结尾.变量$MovieRes是一个简单的列表,为每行显示1到1200之间的数字.根据值,case决定应用哪个"case".
我想知道如何实际使用它case来实现这一点,因为在处理这样的范围时有点混乱.
kev*_*kev 28
在bash中,您可以使用arithmetic expression:((...))
if ((461<=X && X<=660))
then
echo "480p"
elif ((661<=X && X<=890))
then
echo "720p"
elif ((891<=X && X<=1200))
then
echo "1080p"
else
echo "DVD"
fi >> moviefinal
Run Code Online (Sandbox Code Playgroud)
dog*_*ane 25
bash case语句不理解数字范围.它了解shell模式.
以下应该有效:
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
Run Code Online (Sandbox Code Playgroud)
但是,我建议您使用if-else语句并比较其他答案中的数字范围.A case不是解决此问题的正确工具.这个答案仅供参考.
小智 17
只是为了根据需要颠覆案件的乐趣,你可以使用 $((...))
case 1 in
$(($MovieRes<= 460)))echo "$MovieName,???";;
$(($MovieRes<= 660)))echo "$MovieName,480p";;
$(($MovieRes<= 890)))echo "$MovieName,720p";;
$(($MovieRes<=1200)))echo "$MovieName,1080p";;
*)echo "$MovieName,DVD";;
esac >> moviefinal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40754 次 |
| 最近记录: |