Shell概念
一、概念
Shell 是一个用 C 语言编写的程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核
的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
二、Shell 脚本
一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。本文出现的 “shell编程” 都是指 shell 脚本编程。Shell环境Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
n Bourne Shell(/usr/bin/sh或/bin/sh)
n Bourne Again Shell(/bin/bash)
n C Shell(/usr/bin/csh)
n K Shell(/usr/bin/ksh)
n Shell for Root(/sbin/sh)
三.Shell环境
Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系
统默认的 Shell。在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同
样也可以改 为 #!/bin/bash。#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
【1】Shell程序步骤
1、创建一个文件,扩展名为.sh。
2、修改文件的权限为可执行文件
3、执行
【2】Shell结构
1、#! 用来指定执行脚本的shell
2、# 注释
3、 命令和控制结构
【4】Shell变量
命名规则:
1、命名只能使用英文字母,数字和下划线,首
个字符不能以数字开头。
2、中间不能有空格,可以使用下划线(_)。
3、不能使用标点符号。
4、不能使用bash里的关键字(可用help命令查看
保留关键字)
使用规则:
1、习惯用大写字母来命名变量
2、赋值时,”=”前后不能有空格
3、命令的执行结果赋值给变量时
使用反单引号 如:TIME=`date`
4、使用变量时,使用$变量名/${变量名}
只读变量使用readonly,
此命令可以将变量定义为只读变量,只读变量的值不能被改变删除变量使用unset,变量删除后不能再次被使用,
unset不能删除只读命令
变量类型:
临时变量: 也叫局部变量,在脚本或命令中定义,
仅在当前shell实例中有效,其他shell启动的程序
不能访问局部变量。
永久变量: 也叫环境变量,所有的程序,包括sh
ell启动的程序,都能访问环境变量,有些程序需
要环境变量来保证其正常运行。必要的时候shell
脚本也可以定义环境变量。
【5】Shell字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号:
1、单引号里的任何字符都会原样输出,单引号字
符串中的变量是无效的;
2、单引号字串中不能出现单引号(对单引号使用
转义符后也不行)。
双引号:
1、双引号里可以有变量
2、双引号里可以出现转义字符
一、拼接字符串
两种方式:
1、无缝拼接
2、双引号内直接使用变量
二、获取字符串长度
语法1: ${#name}
语法2: expr length ${name}
Shell字符串
三、提取子字符串
语法:${name:startIndex:length}
${name:startIndex}
${name:0-index:length}
${name:0-index}
还可以使用 #、##、%、%%进行删除后保留子串
#、## :从左边开始删除。
# 表示从左边删除到第一个指定的字符;
## 表示从左边删除到最后一个指定的字符。
%、%% :从右边开始删除。
% 表示从右边删除到第一个指定的字符;
%% 表示从左边删除到最后一个指定的字符。
删除包括了指定的字符本身。
四、查找子字符串:
#、## :从左边开始删除。
# 表示从左边删除到第一个指定的字符;
## 表示从左边删除到最后一个指定的字符。
%、%% :从右边开始删除。
% 表示从右边删除到第一个指定的字符;
%% 表示从右边删除到最后一个指定的字符。
删除包括了指定的字符本身。
Shell数组
1、Bash仅仅支持一维数组,并且没有限定数组的
大小。
2、数组元素的下标从0开始。
3、获取数组中的元素要利用下标,
4、下标使用不当,会报错。
【6】Shell数组
一、定义数组
语法1:
arrayName=(值1 值2 … 值n)
语法2:
arrayName=(
值1
值2
..
值n
)
注意:元素间使用空格分隔开或者换行符
或者直接定义数组的各个元素
name[0]=值1
name[1]=值2
name[n]=值n
Shell数组
二、读取数组
格式:${name[index]}
三、获取数组所有元素
格式:
${name[*]} 或${name[@]}
四、获取数组长度
格式:
${#name[*]}或${#name[@]}