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

Shell 脚本基础、组成结构、调试与运算符

Shell 脚本基础、组成结构、调试与运算符

一、脚本基础

1、shell 语言介绍
  1. Shell 编程介绍与特性

    Shell 是一种命令解释程序,也是一种命令语言的解释器。用户输入的符合 Shell 语法和语义的命令行可以被 Shell 理解并执行。Shell 不仅是一种交互式语言,还是一种可编程的程序设计语言。

  2. Shell 语言的特点

    • 解释性语言:无需编译,直接由 Shell 解释执行,快捷方便但运行速度较低。

    • 基于字符串的语言:仅做字符串处理,不支持复杂数据结构和运算。

    • 命令级语言:由命令组成,命令组合功能强大,简洁高效。

Shell 程序(也称 Shell 脚本)是由一系列 Shell 命令构成的文本文件,可包含变量、参数和控制结构。

2、变量
  1. 变量的定义
    变量是程序中保存用户数据的一块内存空间,变量名是内存地址的标识。

  2. 命名规则

    • 由字母、数字或下划线组成。

    • 必须以字母或下划线开头。

    • 建议使用有明确意义的英文单词命名。

  3. 变量类型

  • 整型:age=10

  • 浮点型:salary=3.1(注:Shell 默认不支持浮点,需借助其他工具)

  • 字符串:

    • 可加单引号(强引用,特殊字符无意义)或双引号(弱引用,特殊字符有意义)。

    • 若字符串含空格,必须加引号。

  • 布尔型:True 或 False

3、脚本执行方式
  1. 绝对路径执行/path/to/script.sh
  2. 相对路径执行./script.sh(需执行权限)
  3. 使用 sh 或 bash 命令sh script.sh(无需执行权限)
  4. 使用 . 执行. script.sh(无需执行权限,注意点号后有空格)
  5. 使用 source 执行source script.sh(常用于生效配置文件)
4、Shebang 机制

脚本首行指定解释器,例如:

  • #!/bin/bash
  • #!/usr/bin/python
  • #!/usr/bin/perl

二、脚本的组成结构

1、脚本的组成
  • 开头#!/bin/bash
  • 注释:以 # 开头
  • 命令书写规则
    • 一行一条命令。
    • 多条命令用 ; 分隔。
    • 长命令可用 \ 换行。
2、程序返回值
  • 执行结果:标准输出或错误输出。
  • 状态返回码0 表示成功,1-255 表示错误。

三、脚本调试

1、脚本执行过程
  • 先加载环境变量(如 /etc/profile~/.bashrc 等)。
  • 从上至下、从左至右执行命令。
  • 遇到子脚本先执行子脚本,再返回父脚本。
2、执行原理

Shell 通过创建子进程执行命令,自身仅等待结果,以降低风险。

3、写脚本注意事项
  • 开头加 #!/bin/bash
  • 语法缩进(4空格),多加注释
  • 变量名建议:全局变量大写,局部变量小写,函数名小写
  • 函数中使用 local 定义局部变量
  • 调试命令:set -e(非0退出)、set -x(打印执行过程)
  • 先测试再上线
  • 使用绝对路径命令
  • 命令引用使用反引号 ```或 $()
4、调试方法
  • bash -n script.sh:检查语法错误
  • bash -x script.sh:单步执行,显示详细过程
5、案例

使用 [[:alpha:]] 匹配任意字母,[[:digit:]] 匹配任意数字。

(1)创建目录/tmp/chenyu
(2)切换到/tmp/chenyu目录
(3)创建目录a1b b2c 6cy
(4)创建空文件 xy x123y 123
(5)列出当前目录下以a或者6开头的文件或目录,将这些文件或目录导入到/tmp/file1文件中
(6)列出当前目录下以字母开头,后跟着一个任意数字,再者后面跟任意长度字符的文件或目录,将这些文件或目录导入到/tmp/file2文件中

[root@yanyvhang tmp]# vim test1.sh
# 脚本内容
#!/bin/bash
mkdir /tmp/yy
cd /tmp/yy
mkdir a1b b2c 6cy
touch xy x123y 123
ls | grep "^[ a|6 ]" > /tmp/file1
ls | grep "^[[:alpha:]][[:digit:]]" > /tmp/file2
# 给予权限并运行脚本
[root@yanyvhang tmp]# chmod +x test1.sh 
[root@yanyvhang tmp]# ./test1.sh 

在这里插入图片描述

四、运算符

1、算术运算符

原生 Bash 不支持数学运算,需借助其他命令:

  • 加法:expr $a + $b
  • 减法:expr $a - $b
  • 乘法:expr $a \* $b
  • 除法:expr $b / $a
  • 取余:expr $b % $a
  • 赋值:a=$b
  • 相等:[ $a == $b ]
  • 不相等:[ $a != $b ]

算术运算方式:

  • let C=A+A+A+B
    • let算术运算表达式
  • C=$[ A+A+A+B ]
    • $[算术运算表达式]
  • C=$(( A+A+A+B ))
    • $((算术运算表达式))
  • C=expr $A + $B
    • expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用

写一个脚本,传递两个整数给此脚本,让脚本分别计算并显示这两个整数之和,差,积,商

[root@yanyvhang tmp]# vim test2.sh
# 脚本内容
#!/bin/bash
x=10
y=5let jia=$x+$y
echo "x+y: $jia"jian=$[ $x-$y ]
echo "x-y: $jian"cheng=$(( $x*$y ))
echo "x*y: $cheng "chu=`expr $x / $y`
echo "x/y: $chu"
# 基于权限并运行
[root@yanyvhang tmp]# chmod +x test2.sh 
[root@yanyvhang tmp]# ./test2.sh 

在这里插入图片描述

2、逻辑运算
  • 逻辑与&&
    第一个条件为假时跳过第二个条件。
  • 逻辑或||
    第一个条件为真时跳过第二个条件。

文章转载自:

http://s8LjNMBh.ptysj.cn
http://oEXn7qEj.ptysj.cn
http://U4vYt5O1.ptysj.cn
http://SuPEcEWC.ptysj.cn
http://ImqTcYkt.ptysj.cn
http://D2mmHmyQ.ptysj.cn
http://1OBqF4R4.ptysj.cn
http://WX0pdhYf.ptysj.cn
http://MpFr2jHI.ptysj.cn
http://mcu7dncT.ptysj.cn
http://IutwUZIx.ptysj.cn
http://loHctaBj.ptysj.cn
http://svbnHCwM.ptysj.cn
http://X6Eeag7s.ptysj.cn
http://rBDTWeyj.ptysj.cn
http://gyAtWfmL.ptysj.cn
http://02Ehn5q2.ptysj.cn
http://KCDtuXbL.ptysj.cn
http://Qi50Jc3k.ptysj.cn
http://uawaK4zc.ptysj.cn
http://Z7P0PJUr.ptysj.cn
http://F22IEqeV.ptysj.cn
http://yVc505Wk.ptysj.cn
http://kzqiLJLt.ptysj.cn
http://SfxZIWcJ.ptysj.cn
http://vipfbl4p.ptysj.cn
http://sQYyYSsO.ptysj.cn
http://2lBLX1jr.ptysj.cn
http://b8QIYNId.ptysj.cn
http://YxDLiop1.ptysj.cn
http://www.dtcms.com/a/374601.html

相关文章:

  • Axum web框架【实习】
  • 吾律——让普惠法律服务走进生活
  • 【重学 MySQL】一百、MySQL的权限管理与访问控制
  • STM32F103C8T6开发板入门学习——点亮LED灯2
  • RISC-V体系架构
  • 创作纪念日·512天
  • 【芯片设计-信号完整性 SI 学习 1.1 -- 眼图、抖动、反射、串扰】
  • 小迪安全v2023学习笔记(八十讲)—— 中间件安全WPS分析WeblogicJenkinsJettyCVE
  • 【Linux】基础指令(下)
  • linux 环境下Docker 安装
  • Nginx 配置
  • 20250910_《SQL Server 数据库事务日志定期清理方案(精简优化版)》以10.1.1.31服务器的gtp-default数据库为例
  • 多输入(input)多输出(output)验证
  • 排查JSch连接SFTP服务器失败的问题
  • JMeter压测过程中监控服务器CPU及内存的方法
  • 整理python快速构建数据可视化前端的Dash库
  • Redis缓存穿透、缓存击穿与雪崩防护及性能优化实战指南
  • ArcGIS学习-20 实战-地形研究
  • Ubuntu下基于Nginx+ffmpeg+video.js的HLS流媒体视频播放方案
  • Vue2 VS Vue3
  • 【ArcGIS】如何编辑图层的属性表
  • VueFlow的箭头怎么调整
  • 基于Vue3 +ElementuiPlus + Dexie.js自研的浏览器插件新建标签页tab
  • 【序列晋升】30 Spring Cloud Vault 安全配置管理的微服务守护者
  • 狂想-一种新颖的低成本内嵌标记的视触觉感知前导方案
  • 兰洋科技双展联动展示液冷创新成果,技术驱动打造绿色算力新基建
  • INDEMIND亮相2025科技创变者大会,以机器人空间智能技术解锁具身智能新边界
  • 百度SEM里什么是搜索广告、搜索词、否定关键词、上方位(竞价)广告?
  • 百度竞价推广:百度搜索竞价推广代运营
  • rabbitmq如何保证消息不丢失