Shell编程:流程控制详解

基础知识

编程逻辑类型

  • 顺序执行:从上到下顺序执行

  • 选择执行:根据条件选择不同分支

  • 循环执行:根据条件重复执行代码

Shell结构化命令

  • 条件逻辑

    • if控制语句

    • case控制语句

    • select控制语句

  • 循环逻辑

    • for控制语句

    • while控制语句

    • until控制语句


if条件控制

基本语法

# 单分支
if [ 条件 ]; then
    指令
fi

# 双分支
if [ 条件 ]; then
    指令1
else
    指令2
fi

# 多分支
if [ 条件1 ]; then
    指令1
elif [ 条件2 ]; then
    指令2
else
    指令3
fi

案例实践

#!/bin/bash
# 服务管理脚本
service_ops="$1"

if [ $# -ne 1 ]; then 
    echo "$0 使用方式: $0 [start|stop|restart]"
    exit
fi

if [ "$service_ops" == "start" ]; then
    echo "服务启动中..."
elif [ "$service_ops" == "stop" ]; then
    echo "服务关闭中..."
elif [ "$service_ops" == "restart" ]; then
    echo "服务重启中..."
else
    echo "$0 使用方式: $0 [start|stop|restart]"
fi

case条件控制

基本语法

case 变量 in
    值1)
        指令1
        ;;
    值2)
        指令2
        ;;
    *)
        默认指令
        ;;
esac

案例实践

#!/bin/bash
# 脚本管理平台
env_array=(os web sql storage other)

echo "请选择功能场景:"
echo "1: 系统环境 2: Web环境 3: 数据库 4: 存储 5: 其他"
read -p "输入序号: " env_id

case "${env_array[$env_id-1]}" in
    "os") ls os ;;
    "web") ls web ;;
    "sql") ls sql ;;
    "storage") ls storage ;;
    "other") ls other ;;
    *) echo "无效选项" ;;
esac

嵌套应用

case "$safe_check" in
    "true") echo "禁止进入" ;;
    "false")
        read -p "车票是否过期: " ticket_check
        case "$ticket_check" in
            "true") echo "禁止上车" ;;
            "false") echo "允许上车" ;;
            *) echo "请重新检查" ;;
        esac ;;
    *) echo "请重新检查" ;;
esac

for循环

基本语法

# 列表循环
for i in 列表; do
    指令
done

# C语言风格
for ((i=0; i<10; i++)); do
    指令
done

列表生成方式

手工列表:1 2 3 4

花括号扩展:{1..4}

命令生成:$(seq 1 4)

脚本参数:$@ 或 $*

案例实践

#!/bin/bash
# 批量创建用户
for i in {1..5}; do
    useradd user-$i
    echo "用户 user-$i 创建成功"
done

# 数值计算
sum=0
for ((i=1; i<=100; i++)); do
    let sum+=i
done
echo "1-100之和: $sum"

进度条实现

for ((i=0; i<=100; i++)); do 
    printf "\e[4D%3d%%" $i
    sleep 0.1
done

while循环

基本语法

while [ 条件 ]; do
    指令
done

案例实践

#!/bin/bash
# 持续检测网站
read -p "输入检测网址: " site_addr
while true; do
    ping -c1 $site_addr >/dev/null && echo "正常" || echo "异常"
    sleep 1
done

# 文件逐行读取
while read line; do
    echo "行内容: $line"
done < file.txt

until循环

基本语法

until [ 条件 ]; do
    指令
done

与while对比

  • while:条件满足时执行

  • until:条件不满足时执行

案例实践

#!/bin/bash
# 99乘法表
num1=9
until [ $num1 -eq 0 ]; do
    num2=1
    until [ $num2 -gt $num1 ]; do
        echo -n "$num1×$num2=$((num1*num2)) "
        let num2++
    done
    echo
    let num1--
done

select菜单

基本语法

select 变量 in 列表; do
    case $变量 in
        ...
    esac
done

案例实践

#!/bin/bash
PS3="请选择软件: "
options=("Nginx" "Apache" "Tomcat")

select opt in "${options[@]}"; do
    case $opt in
        "Nginx") echo "安装Nginx..." ; break ;;
        "Apache") echo "安装Apache..." ; break ;;
        "Tomcat") echo "安装Tomcat..." ; break ;;
        *) echo "无效选项" ; break ;;
    esac
done

你可能感兴趣的:(oracle,数据库,笔记)