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

四.shell脚本编程

、 Shell字符串详解
字符串(String)就是一系列字符的组合。字符串是Shell编程中最常用的数据类型之一

字符串可以由单引号''包围,也可以由""包围,也可以不用引号,三种方式的区别

由单引号' '包围的字符串

任何字符都会原样输出,在其中使用变量是无效的

字符串中不能出现单引号,即使对单引号进行转义也不行

由双引号" "包围的字符串

如果其中包含了某个变量,那么该变量就会被解析(得到该变量的值),而不是原样输出

字符串中可以出现双引号,只要进行转义就行

不被引号包围的字符串

不被引号包围的字符串中出现变量也会被解析,这一点和双引号""包围的字符串一样

字符串中不能出现空格,否则空格后面的字符串会作为其他变量或者命令解析

通过代码演示一下三种形式的区别

str1 中包含了$n,它被解析为变量 n 的引用。$n后边有空格,紧随空格的是 str2;Shell 将 str2 解释为一个新的变量名,而不是作为字符串 str1 的一部分

str2 中包含了引号,但是被转义了(由反斜杠\开头的表示转义字符)。str2 中也包含了$n,它也被解析为变量 n 的引用

str3 中也包含了$n,但是仅仅是作为普通字符,并没有解析为变量 n 的引用

获取字符串长度

在Shell中获取字符串长度很简单,具体方法如下:

4.1、Shell字符串拼接
在脚本语言中,字符串的拼接(也称为字符串连接或者字符串合并)往往都非常简单,例如:

在PHP中使用.即可连接两个字符串

在JavaScript中使用+即可将两个字符串合并为一个

然而,在Shell中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接

4.2、Shell字符串截取
Shell截取字符串通常有两种方式,从指定位置开始截取和从指定字符(子字符串)开始截取

从指定位置开始截取

这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串

既然需要指定起始位置,那么就要涉及到计数方向的问题,到底是从字符串左边开始计数,还是从字符串右边开始计数?答案是:Shell同时支持两种计数方式

1.从字符串左边开始计数

如果想从字符串的左边开始计数,那么截取字符串的具体格式如下:

2.从右边开始计数

如果想从字符串的右边开始计数,那么截取字符串的具体格式如下:

从指定字符(子字符串)开始截取

这种截取方式无法指定字符串长度,只能从指定字符(子字符串)截取到字符串末尾。Shell可以截取指定字符(子字符串)右边的所有字符,也可以截取左边的所有字符

1)使用#号截取右边字符

使用#号可以截取指定字符(或子字符串)右边的所有字符,具体格式如下:

2)使用%截取左边字符

使用%号可以截取指定字符(或者子字符串)左边的所有字符

、bash的配置文件

bash shell的配置文件很多,可以分为以下类别

5.1 按生效范围划分为两类
5.1.1 全局配置:
5.2 shell登录的两种方式分类
5.2.1 交互式登录
  • 直接通过终端输入账户密码

  • 使用su - username 切换用户

配置文件执行顺序:

5.2.2 非交互式登录
  • su username

  • 图形界面下打开的终端

  • 执行脚本

  • 任何其他的bash实例

配置文件执行顺序:

5.3 按功能划分分类
5.3.1 Profile类
profile类为交互式登录的shell提供配置

全局:/etc/profile, /etc/profile.d/*.sh

个人:~/.bash_profile

功能:

用于定义环境变量

运行命令或脚本

5.3.2 Bashrc类
bashrc类:为非交互式和交互式登录的shell提供配置

全局:/etc/bashrc

个人:~/.bashrc

功能:

定义命令别名和函数

定义本地变量

5.4 编辑配置文件生效

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

相关文章:

  • 在时间序列中增加一个阶跃对长期趋势变化的影响
  • 大批量文件管理操作的linux与windows系统命令行终端命令
  • Linux内核进程管理子系统有什么第四十回 —— 进程主结构详解(36)
  • 【网络安全入门基础教程】网络安全行业,未来两年就业和再就业都会很难
  • git: 取消文件跟踪
  • Linux Shells
  • ubuntu24.04网络无法访问(网络问题)NAT网关写错了
  • MSVC, GCC, Clang
  • playwright+python 实现图片对比
  • Linux 进程信号补充知识点总结(按重要程度排序)
  • 立足稳联技术的Ethernet IP转ModbusTCP网关与触摸屏连接案例的专业研判
  • Web3 出海香港 101 |BuildSpace AMA 第一期活动高亮观点回顾
  • C++全局变量未初始的和已初始化的位置放在哪里?
  • Web3兴起:重新定义互联网格局
  • 强化学习PPO/DDPG算法学习记录
  • 图像编码之摄像机的H264 分块编码的含义是什么,以分块编码(tile)192X192为例子说明,好处与缺点分别是什么
  • Day19(前端:JavaScript基础阶段)
  • Linux笔记14——shell编程基础-8
  • 解决戴尔笔记本电脑键盘按键部分失灵
  • 未来工厂雏形:基于Three.js的自主演进式数字孪生系统设计
  • Qwen3-Reranker-0.6B 模型结构
  • Coze平台指南(2):开发环境的搭建与配置
  • Cisco FMC利用sftp Server拷贝文件方法
  • Ubuntu中配置JMmeter工具
  • 从零开始:用代码解析区块链的核心工作原理
  • Ubuntu 24.04 服务器配置MySQL 8.0.42 三节点集群(一主两从架构)安装部署配置教程
  • 软件设计师——软件工程学习笔记
  • 矩阵scaling预处理介绍
  • AI代码生成神器终极对决:CodeLlama vs StarCoder vs Codex,谁才是开发者的「最佳拍档」?
  • STM32CUBEMX配置LAN8720a实现UDP通信