当前位置:首页 > 行业动态 > 正文

shell编程中case语句和循环语句怎么用

在Shell编程中,case语句和循环语句是两种非常重要的控制结构,它们可以帮助我们根据不同的条件执行不同的操作,本文将详细介绍这两种结构的用法。

一、case语句

1.1 基本语法

case语句的基本语法如下:

case 变量名 in
    模式1)
        命令序列1
        ;;
    模式2)
        命令序列2
        ;;
    *)
        默认命令序列
        ;;
esac 

1.2 使用示例

下面是一个简单的例子,根据用户输入的数字输出对应的星期:

#!/bin/bash

echo "请输入一个数字(1-7):"
read num

case $num in
    1)
        echo "星期一"
        ;;
    2)
        echo "星期二"
        ;;
    3)
        echo "星期三"
        ;;
    4)
        echo "星期四"
        ;;
    5)
        echo "星期五"
        ;;
    6)
        echo "星期六"
        ;;
    7)
        echo "星期日"
        ;;
    *)
        echo "输入错误,请输入1-7之间的数字"
        ;;
esac 

1.3 注意事项

– case语句中的每个模式都需要用双引号括起来,以避免因为空格等原因导致的错误。

– case语句中的模式可以是字符串、整数等任何类型的值,如果需要匹配其他类型的值,可以使用通配符`*`,`[0-9]`可以匹配任意一个数字字符。

– case语句的默认分支是在没有匹配到任何模式时执行的,默认分支的命令序列不需要用分号`;`结尾,如果不指定默认分支,那么当没有匹配到任何模式时,case语句会直接结束。

– 在case语句中,可以使用`break`命令跳出当前模式的匹配,继续执行下一个case语句或者整个脚本,但是不能使用`continue`命令跳过当前模式的匹配,回到上一个模式的匹配,如果需要实现类似的功能,可以在case语句之前添加一个循环结构。

– 在使用case语句时,需要注意作用域的问题,如果在case语句之前定义了一个变量,那么在case语句中可以直接使用这个变量的值,但是如果在case语句中使用了一个以双引号括起来的字符串作为模式,那么这个字符串中不能包含已经存在的变量名,否则会导致语法错误,为了解决这个问题,可以在case语句之前定义一个函数,然后在函数内部使用双引号括起来的字符串作为模式,这样可以避免作用域的问题。

function get_day {
    echo "$1" | grep -o '[1-7]' && echo "星期一" || echo "星期二" || echo "星期三" || echo "星期四" || echo "星期五" || echo "星期六" || echo "星期日" || exit 1
}

get_day "$num" && echo "今天是星期$num" || echo "输入错误,请输入1-7之间的数字" || exit 1 

二、循环语句

2.1 for循环语法

for循环的基本语法如下:

for 变量名 in 值序列 do
    命令序列
done 

2.2 while循环语法(与for循环类似)

0