当前位置: 首页 > news >正文

【Linux操作系统 | 第21篇-进阶篇】Shell编程(下篇)

在这里插入图片描述

文章目录

  • 🥝if条件判断
    • if判断🍋‍🟩
      • 栗子🌰
    • if elseif 语句🍋‍🟩
  • 🥝case语句
      • 栗子🌰
  • 🥝for循环
    • 基本语法1
      • 栗子🌰:循环打印命令行输入的参数
    • 基本语法2
      • 栗子🌰:输出 1-100 的总和
  • 🥝while循环
    • 基本语法
      • 栗子🌰:输出 1-100 的总和
  • 🥝read读取控制台输入
      • 栗子🌰
        • 使用-p,读取控制台,输入一个NUM1值
        • 使用-t和-p,读取控制台,输入一个NUM2值,并在5秒内输入
  • 🥝Shell函数
      • 应用实例:请以带和不带文件后缀名两种方式返回/home/shellCode/a.txt的文件名
  • 自定义函数
    • 语法1:传统语法
    • 语法2:简化语法(推荐)

🥝if条件判断

if判断🍋‍🟩

基本语法:【注意:condition前后要有空格

if [ condition ] then
  满足if语句执行的代码
fi

常用的判断条件:

判断类别判断符号和作用
字符串比较=
两个整数比较比较-lt 【小于】
-gt 【大于】
-le 【小于等于】
-ge 【大于等于】
-nt 【不等于】
按照文件权限判断-r (有读的权限)
-w (有写的权限)
-x (有可执行的权限)
按照文件的类型判断-f (文件存在,并且是一个常规文件)
-e (文件存在)
-d (文件存在并且是一个目录)

栗子🌰

  1. “hello"是否等于"hello”
  2. 23是否大于等于22
  3. /root/shellCode/vr.sh是否存在

注意:每个条件的前后都要有空格,否则会报错

脚本命令:

#!/bin/bash# 案例1
if [ "hello" = "hello"  ]
then echo "两个字符串的值相等"
fi# 案例2
if [ 23 -ge 22 ]
thenecho "23大于22"
fi# 案例3
if [ -f /root/shellCode/vr.sh ]
then echo "文件存在"
fi

运行结果:

[root@hygge shellCode] ./ifDemo.sh 
两个字符串的值相等
23大于22
文件存在

注意几个特殊写法

  • if [ abc ] 表示条件为 true
  • if [ ] 表示条件为 false
  • if [ vvv ]
    thenecho "条件为真"
    fiif [ ]
    thenecho "条件不为flase"
    fi
    

    运行结果:

    [root@hygge shellCode] ./ifDemo.sh
    条件为真
    

    if elseif 语句🍋‍🟩

    if [ $1 -ge 60 ]
    thenecho "及格"
    elif [ $1 -lt 60 ]
    thenecho "不及格"
    fi
    
     [root@hygge shellCode] ./ifDemo.sh  80
    及格[root@hygge shellCode] ./ifDemo.sh  55
    不及格
    

    🥝case语句

    基本语法:

    case “$变量名” in
    值1)
    命令1
    命令2;; # 结束当前分支
    值2|值3) # 多个模式用竖线分隔
    命令3;;
    *) # 默认分支(类似default)
    默认命令;;
    esac # case的倒写,表示结束

    栗子🌰

    在这里插入图片描述
    运行结果:

    [root@hygge shellCode] ./caseDemo.sh   1
    Monday
    [root@hygge shellCode] ./caseDemo.sh   2
    Tuesday
    [root@hygge shellCode] ./caseDemo.sh   35
    other
    

    🥝for循环

    基本语法1

    for 变量 in 值1 值2 值3…
    do
      满足循环条件需要执行的代码
    done

    栗子🌰:循环打印命令行输入的参数

    脚本命令:

    #!/bin/bash
    for i in "$@"
    doecho "number is $i"
    done
    

    执行结果:

    [root@hygge shellCode] vim testFor.sh 
    [root@hygge shellCode] chmod u+x testFor.sh
    [root@hygge shellCode] ./testFor.sh 100 200 300
    number is 100
    number is 200
    number is 300
    

    基本语法2

    for ((初始值;循环控制条件;变量变化))
    do
     满足循环条件需要执行的代码
    done

    栗子🌰:输出 1-100 的总和

    脚本命令:

    for (( i=1;i<=100;i++ ))
    doSUM=$[$SUM+$i]
    done
    echo "SUM是$SUM"
    

    运行结果:

    [root@hygge shellCode] ./testFor.sh  
    SUM是5050
    

    🥝while循环

    基本语法

    while [ 条件判断式 ]
    do
      代码
    done

    栗子🌰:输出 1-100 的总和

    脚本命令:

    #!/bin/bash
    SUM=0
    i=0
    while [ $i -le $1 ]
    doSUM=$[$SUM+$i]i=$[$i+1]
    done
    echo "SUM=$SUM"
    

    运行结果:

    [root@hygge shellCode]  vim testWhile.sh
    [root@hygge shellCode]  chomd u+x testWhile.sh 
    [root@hygge shellCode] ./testWhile.sh 100
    SUM=5050
    

    🥝read读取控制台输入

    基本语法:

    read 选项 参数

    选项功能
    -p指定读取值时的提示符
    -t指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了(放弃输入)

    栗子🌰

    使用-p,读取控制台,输入一个NUM1值

    脚本命令:

    #!/bin/bash
    read -p "请输入一个参数:" NUM1
    echo "NUM1=$NUM1"
    

    运行结果:

    [root@hygge shellCode]# ./testRead.sh
    请输入一个参数:100
    NUM1=100
    
    使用-t和-p,读取控制台,输入一个NUM2值,并在5秒内输入

    脚本命令:

    #!/bin/bash
    if read -t 5 -p "请输入一个参数:" NUM2
    then    echo "NUM2=$NUM2"
    elseecho "超时未输入"
    fi
    

    运行结果:

    [root@hygge shellCode] ./testRead.sh
    请输入一个参数:100
    NUM2=100
    

    🥝Shell函数

    shell编程和其他编程一样,有系统函数,也可以自定义函数。系统函数我们主要介绍两个。

    1. basename 获取文件名

    作用:去掉文件完整路径的多级路径 (和后缀名),返回文件名
    基本语法:

    basename 文件的完整路径 [文件后缀]
    不带文件后缀就保留扩展名,仅去掉路径前缀;带文件后缀名,就会去掉扩展名)】

    应用实例:请以带和不带文件后缀名两种方式返回/home/shellCode/a.txt的文件名

    [root@hygge shellCode] basename /home/shellCode/a.txt  # 不带文件后缀名
    a.txt[root@hygge shellCode] basename /home/shellCode/a.txt .txt  #带文件后缀名
    a 
    
    1. dirname 返回完整路径最前面部分
    [root@hygge shellCode] dirname /home/shellCode/a.txt
    /home/shellCode
    

    自定义函数

    语法1:传统语法

    function 函数名() {
    命令集
    return 返回值   # 可选,默认返回最后一个命令的退出状态(0或非0)
    }

    语法2:简化语法(推荐)

    函数名() {
    命令集
    }

    需求:计算两个输入参数的和
    脚本命令:

    #!/bin/bash
    # 方式 1
    function getSum () {SUM=$[$n1+$n2]echo "$SUM"
    }
    read -p "输入第一个参数:" n1
    read -p "输入第二个参数:" n2
    getSum $n1 $n2# 方式 2
    getSum2 () {SUM=$[$n1+$n2]echo "$SUM"
    }
    read -p "输入第一个参数:" n1
    read -p "输入第二个参数:" n2
    getSum $n1 $n2
    

    运行结果:

    [root@hygge shellCode] ./testFunction.sh
    输入第一个参数:10
    输入第二个参数:20
    30
    输入第一个参数:10
    输入第二个参数:20
    30 
    

    如果我的内容对你有帮助,请 点赞 评论 收藏 。创作不易,大家的支持就是我坚持下去的动力!
    在这里插入图片描述

http://www.dtcms.com/a/289653.html

相关文章:

  • 什么是的优先级反转(Priority Inversion) 和 优先级继承(Priority Inheritance)?
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • 【AI论文】递归混合体:学习动态递归深度以实现自适应的令牌级计算
  • faster-lio与fast-lio中如何修改雷达的旋转角度
  • 单片机启动流程和启动文件详解
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 59(题目+回答)
  • 商业秘密保护:从法律理论到企业实战
  • 牛客-删除公共字符
  • 股票账户数据及其数据获取
  • 【时时三省】(C语言基础)字符指针作函数参数
  • 如何系统性备考网络规划师
  • TCL --- 列表_part1
  • 第459场周赛
  • 开源社区贡献指南:如何通过Three.js插件开发提升企业技术影响力?
  • 【JS逆向基础】数据库之mysql
  • Python,GPU编程新范式:CuPy与JAX在大规模科学计算中的对比
  • 【企业架构】TOGAF概念之一
  • Linux基础命令详解:从入门到精通
  • 详解Mysql解决深分页方案
  • 试用SAP BTP 05A:AI服务-Document Information Extraction
  • Python桌面版数独(二版)-增加4X4、6X6
  • 小型支付项目3-5:检测未接收到或未正确处理的支付回调通知
  • 论文笔记:Seed: Bridging Sequence and Diffusion Models for RoadTrajectory Generation
  • LLM指纹底层技术——KV缓存压缩
  • 嵌入式通信DQ单总线协议及UART(一)
  • 是否可以将“进化”应用到软件系统的设计中?
  • 049_List接口(ArrayList / LinkedList / Vector)
  • Three.js + WebGL 深空星波粒子动画特效制作详解
  • 30天打牢数模基础-模拟退火算法讲解
  • 零基础100天CNN实战计划:用Python从入门到图像识别高手