四.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
功能:
定义命令别名和函数
定义本地变量