「 SHELL 」流程控制

SHELL 流程控制

在shell的语句中,流程控制主要分为两种:

  • 简单流程控制语句:选择和循环

  • 复杂流程控制语句:函数

4.1 简单流程控制语句

4.1.1 单分支if语句

语法格式

if [ 条件 ] 
then
    指令 
fi

场景:

  • 单一条件,只有一个输出

单分支if语句示例

#!/bin/bash 
# 单 if 语句的使用场景 
if [ "$1" == "nan" ] 
then
    echo "您的性别是 男" 
fi

4.1.2 双分支if语句

语法格式:

if [ 条件 ] 
then
    指令 1 
else
    指令 2 
fi

场景:

  • 一个条件,两种结果

双分支if语句示例

#!/bin/bash 
# 单 if 语句的使用场景 
if [ "$1" == "nan" ] 
then
    echo "您的性别是 男" 
else
    echo "您的性别是 女" 
fi

4.1.3 多分支if语句

语法格式:

if [ 条件 ] 
then
  指令 1 
elif [ 条件 2 ] 
then
  指令 2 
else
  指令 3 
fi

场景:

  • n个条件,n+1个结果

多分支if语句示例

#!/bin/bash 
# 多 if 语句的使用场景 
if [ "$1" == "nan" ] 
then
    echo "您的性别是 男" 
elif [ "$1" == "nv" ] 
then
    echo "您的性别是 女" 
else
    echo "您的性别,我不知道" 
fi

多if语句生产场景: 服务的启动

需求:

  • 要求脚本执行需要有参数,通过传入参数来实现不同的功能。

参数和功能详情如下:

参数 执行效果
start 服务启动中...
stop 服务关闭中...
restart 服务重启中...
* 脚本 X.sh 使用方式 X.sh [ start stop restart ]

脚本内容:

tarena@tarena~$:/data/scripts/python-n# cat if.sh 
#!/bin/bash 
# 多 if 语句的使用场景 
if [ "$1" == "start" ] 
then
  echo "服务启动中..." 
elif [ "$1" == "stop" ] 
then
  echo "服务关闭中..." 
elif [ "$1" == "restart" ] 
then
  echo "服务重启中..." 
else
  echo "$0 脚本的使用方式: $0 [ start | stop | restart ]" 
fi

4.1.4 case 选择语句

我们发现多if语句使用的时候,代码量很多,而且整体看起来确实有那么一丁点乱,有没有办法更好的实现这种效 果呢?就是Case语句。

case 语句格式

case 变量名 in 
  值 1)
      指令 1
      ;; 
  值 2)
      指令 2
      ;; 
  值 3) 
      指令 3
      ;; 
esac

注意:

  • 首行关键字是case,末行关键字esac

  • 选择项后面都有 )

  • 每个选择的执行语句结尾都有两个分号;

case语句示例

场景:在多if语句的基础上对脚本进行升级

需求:要求脚本执行需要有参数,通过传入参数来实现不同的功能

参数和功能详情如下:

参数 执行效果
start 服务启动中...
stop 服务关闭中...
restart 服务重启中...
* 脚本 X.sh 使用方式 X.sh [ start stop restart ]

脚本内容:

# cat case.sh 
#!/bin/bash 
# case 语句使用场景 
case "$1" in 
    "start") 
        echo "服务启动中..." 
        ;; 
    "stop") 
        echo "服务关闭中..." 
        ;; 
    "restart") 
        echo "服务重启中..." 
        ;; 
    *) 
        echo "$0 脚本的使用方式: $0 [ start | stop | restart ]" 
        ;; 
esac

4.1.5 for循环语句

循环指定的所有元素,循环完毕之后就推出

语法格式:

for 值 in 列表 
do 
    执行语句 
done

场景:

  • 遍历列表

注意:

  • ”for” 循环总是接收 “in” 语句之后的某种类型的字列表

  • 执行次数和list列表中常数或字符串的个数相同,当循环的数量足够了,就自动退出

示例:遍历文件

#!/bin/bash 
# for 语句的使用示例 
for i in $(ls /root) 
do
    echo "${i}" 
done

4.1.6 while循环语句

语法格式

while 条件 
do 
    执行语句 
done

注意:

  • 条件的类型: 命令、[[ 字符串表达式 ]]、(( 数字表达式 ))

场景:

  • 只要条件满足,就一直循环下去

while语句示例

#!/bin/bash 
# while 的示例 
a=1 
while [ "${a}" -lt 5 ] 
do 
    echo "${a}" 
    a=$((a+1)) 
donesss

4.1.7 until循环语句

语法格式:

until 条件 
do 
    执行语句 
done

注意:

  • 条件的类型: 命令、[[ 字符串表达式 ]]、(( 数字表达式 ))

场景:

  • 只要条件不满足,就一直循环下去

until 语句示例

#!/bin/bash 
# until 的示例 
a=1 
until [ "${a}" -eq 5 ] 
do 
    echo "${a}" a=$((a+1)) 
done

4.2 复杂流程控制语句

函数就是我们的复杂流程控制语句

4.2.1 函数基础知识

函数是什么?

函数就是将某些命令组合起来实现某一特殊功能的方式,是脚本编写中非常重要的一部分。

简单的函数格式:

定义函数:

函数名(){ 
    函数体 
} 

调用函数:

    函数名

传参函数格式:

传参数

函数名 参数 

函数体调用参数:

函数名(){ 
    函数体 $n 
} 

注意: 类似于shell内置变量中的位置参数

4.2.2 函数实践

简单函数定义和调用示例

#!/bin/bash 
# 函数使用场景一:执行频繁的命令 
dayin(){ 
    echo "wo de mingzi shi 111" 
}
dayin

函数传参和函数体内调用参数示例

#!/bin/bash 
# 函数的使用场景二 
dayin(){ 
    echo "wo de mingzi shi $1" 
    }
dayin 111

函数调用脚本传参

#!/bin/bash 
# 函数传参演示 
# 定义传参数函数 
dayin(){ 
    echo "wode mignzi shi $1" 
    }
# 函数传参 
dayin $1

脚本传多参,函数分别调用示例

#!/bin/bash 
# 函数的使用场景二 
dayin(){ 
    echo "wo de mingzi shi $1" 
    echo "wo de mingzi shi $2" 
    echo "wo de mingzi shi $3" 
}
dayin 111 df dfs

你可能感兴趣的:(「 SHELL 」流程控制)