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

Shell编程基础知识

文章目录

  • Shell 编程基础
    • 概念
      • Shell 的调用
        • 系统调用
        • 自定义的手动调用
      • 执行方式
        • 注意事项
    • 变量
      • 分类
      • 变量的定义与初始化
      • 只读变量
      • 转换为数字
      • 撤销变量
      • 导出变量
      • 查看系统变量命令
      • 预定义变量
      • 脚本变量的特殊用法
    • 测试
      • 语法
      • 测试文件
      • 测试字符串
      • 比较大小
      • 复合条件
    • 条件语句
      • `if` 语句
      • `case` 语句
    • 循环语句
      • `for` 语句
      • `while` 语句
      • `until` 语句
    • 函数
      • 定义函数
      • 调用函数
      • 关键字



Shell 编程基础

概念

Shell 是一个程序,同时也是一种程序设计语言。从程序的角度看,Shell 是命令解析器,常用的 Shell 命令解析器有 sh、ash 和 bash 等,我们的系统默认使用 bash。从程序设计语言的角度看,它设计了程序语言所需的相关结构,如变量、条件语句、分支语句、循环语句和函数等。

Shell 的调用

系统调用
  • 开机调用: /etc/profile
  • 用户登录调用: ~/.bashrc
自定义的手动调用
  • #! : 说明执行该 Shell 脚本的解释器
  • # : 注释

执行方式

  • 方式1: ./shell脚本名
    使用 #! 中指明的解析器,如果没有指明则使用默认的解析器,并会开启子Shell。

  • 方式2: 命令解析器名 shell脚本名
    使用指定的解析器,不考虑代码中 #! 说明的 shell,会开启子Shell。

  • 方式3: . shell脚本名
    不会开启子Shell,使用当前的 shell。

注意事项
  • Shell 文件需具备执行权限。可使用命令:chmod +x shell脚本名
  • 不要在 Windows 中编写 Shell 脚本再在 Linux 系统中使用,因为 Windows 对 / 的解释与 Linux 中不同。

变量

分类

  1. 系统提供的变量
  2. 自定义变量
  3. 预定义变量

变量的定义与初始化

  • 定义: 变量名=值
  • 修改值: 变量名=新值
  • 取值: $变量名

只读变量

  • 定义: readonly 变量名=值

转换为数字

  • 定义: declare -i 变量名

撤销变量

  • 撤销: unset 变量名

导出变量

  • 导出: export 变量名
    注意:导出到父 shell。

查看系统变量命令

env

预定义变量

  • $#: 参数个数
  • $*: 所有参数
  • $1, $2, ...: 第一个、第二个参数
  • $?: 上一个命令的返回状态
  • $0: 脚本名称
  • $$: 当前Shell的进程ID

脚本变量的特殊用法

  • "": 会解析变量

    num=10
    echo "$num"  # 结果是 10
    
  • '': 不会解析变量

    num=10
    echo '$num' $num  # 输出 '$num' 10
    
  • `: 会解析命令

    echo `date`  # 打印当前时间
    
  • ( 代码 ): 会在子Shell中执行
    注意:代码之间需有空格,子Shell可访问父Shell的变量,父Shell不能访问子Shell中的变量。

    num=10
    (
      num=1
      echo $num  # 输出 1
    )
    echo $num  # 输出 10
    
  • { 代码 }: 在当前 shell 中执行
    注意:代码之间需有空格。

测试

语法

  1. test 条件
  2. [ 条件 ]

测试文件

  • -e: 是否存在
  • -d: 是否为目录
  • -f: 是否为文件
  • -r: 是否可读
  • -w: 是否可写
  • -x: 是否可执行
  • -L: 是否是链接
  • -c: 是否为字符设备
  • -b: 是否为块设备
  • -s: 是否非空

测试字符串

  • =: 判断字符串内容是否相同
  • !=: 判断字符串是否不相同
  • -z: 判断字符串是否为空串
  • -n: 判断字符串是否为非空

比较大小

  • -eq: 相等
  • -ne: 不相等
  • -gt: 大于
  • -ge: 大于等于
  • -lt: 小于
  • -le: 小于等于

复合条件

  • &&: 与
  • ||: 或
  • -a: 与
  • -o: 或
  • !: 非

条件语句

if 语句

if [ 条件 ]; then
  执行语句
elif [ 条件 ]; then
  执行语句
...
else
  执行语句
fi

case 语句

case $变量名 in
  "值")
    执行语句
    ;;
  "值")
    执行语句
    ;;
  *)
    执行语句
    ;;
esac

循环语句

for 语句

  • 语法1:
for (( 初始化变量; 条件; 改变变量 ))
do
  执行语句
done
  • 语法2:
for 变量名 in 遍历的内容
do
  执行语句
done

while 语句

while [ 条件 ]
do
  执行语句
done

until 语句

until [ 条件 ]
do
  执行语句
done

函数

定义函数

  • 语法1:
函数名(){
  执行语句
}
  • 语法2:
function 函数名(){
  执行语句
}

调用函数

函数名 参数1 参数2 ...

关键字

  • return: 结束函数
  • return xxx: 结束函数并返回 xxx
  • break: 跳出当前循环
  • exit 1: 退出当前程序

以上就是 Shell 编程的基本知识。


http://www.kler.cn/a/289513.html

相关文章:

  • vxe-table 3.10+ 进阶高级用法(一),根据业务需求自定义实现筛选功能
  • 安全生产管理的重要性:现状、痛点与改进之路
  • 操作系统离散存储练习题
  • React Native 全新架构来了
  • vue2.x elementui 固定顶部、左侧菜单与面包屑,自适应 iframe 页面布局
  • Vue常用加密方式
  • Trm理论 2(Word2Vec)
  • 如何通过k8s来降低运营成本?
  • cuda编程[5]:矩阵乘法--使用静态共享内存优化
  • C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)
  • Linux服务器CPU和IO的监控利器-iostat简介
  • 【重学 MySQL】一、数据库概述
  • 一个好用的Maven依赖冲突解决插件:Maven Helper
  • Flask wtforms组件的作用
  • 【无人机设计与控制】使用 SimMechanics 在 Simulink 中仿真四旋翼飞行器
  • 认识git和git的基本使用,本地仓库,远程仓库和克隆远程仓库
  • 【WPF中的图形(Shape)】
  • 高端控制台使用过程中如何保证用电安全
  • 分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型
  • vue2———组件
  • 华为云征文|部署RedisStack+可视化操作
  • Echarts可视化
  • 网络通信特刊合集(二)——CMC特刊推荐
  • 贪心算法---无重叠区间
  • 江协科技stm32————11-1SPI通信协议
  • Python爬虫-实现自动获取随机请求头User-Agent