shell脚本
1.定义
1.shell命令的有序集合
2.shell脚本是解释型语言,每次修改后可直接执行
3.shell脚本的运行方式:给脚本文件添加可执行权限,通过路径/文件名的方式进行运行
$ chmod u+x 1.sh
$ ./1.sh
2.shell输入输出
2.1 echo
默认带有换行功能
-n | 输出内容的时候不换行 |
---|
- | echo -n “string” #echo -n “hello world” |
-e | 解释转义字符 |
- | echo -e “string\n\t” |
echo输出内容的时候需要加上双引号
echo -ne "\tstring\n"
string
2.2 read
-a | 将变量读入到数组中 |
---|
- | read -a 数组名 #read -a arr |
-n num | 读取num个字符后结束 |
- | read -n num a #read -3 a |
-p 字符串 | 跟提示信息 |
- | read -p “Please input>” 变量名 |
-s | 静默模式,输入的内容不会再终端回显 |
- | read -s C |
-t seconds | 等待多少秒后如果没有输入自动结束 |
- | read -r 3 D |
3.shell变量
3.1 环境变量
PATH、PS1
$ env #查看所有的环境变量
修改环境变量
修改当前用户 | ~/.bashrc |
---|
修改所有用户 | /etc/environment |
- | /etc/bash.bashrc |
- | /etc/profile |
PATH变量的概念
1.储存系统可执行命令的所在路径,通常用的绝对路径 |
---|
2.提供了对系统命令搜寻的遍历 |
修改
PATH=${PATH};添加的路径 |
---|
引用原有路径的基础上添加新的路径 |
3.2 预定义变量
概念:
1.是由shell程序提供的内置变量
2.用来储存shell程序运行过程中的状态信息
3.不需要设置,只能引用
使用:
$$ | 储存当前进程的进程号信息 |
---|
$0 | 储存当前进程名信息 |
$? | 储存当前命令的返回值信息,成功返回0,失败返回非0 |
$! | 储存最后一个后台进程的进程号信息 |
3.3 位置变量
$1-$9 | 位置1-9 |
---|
${10} ${11} | 十以后的位置 |
shift | 剪切、将后面的位置变量前移一个位置 |
$# | 所有位置变量的个数,不包含脚本文件 |
$* | 所有位置变量的个数,不包含脚本文件 |
$@ | 所有位置变量的值,不包含脚本文件 |
- | 注:$ *和 $@大多数情况下没区别,如果有双引号的时候, $ *将所有的参数当做整体处理,$@每一个参数还是独立的 |
3.4 自定义变量
变量没有数据类型,通常可以直接使用
x=1
x=2
变量的引用
$变量名
删除变量
unset 变量名
4.shell数组
只支持一维数组,没有多维数组的概念
4.1 数组的定义
数组名=(value1 value2 value3)
注意 |
---|
1、数组的元素个数不需要指定 |
2、数组中每一个元素使用空格分隔 |
3、所有元素使用括号括起来 |
4、arr=(11 22 33 44 55) 长度为5 |
5、数组长度可变 |
6、shell数组可以只针对某几个成员进行初始化 |
arr=([0]=11 [3]=33 [5]=55) 长度为3 |
7、arr=(1 “hello” ‘abc’) |
4.2 数组的访问
${数组名[下标]}------从0开始
${arr[0]}
输出数组的所有元素 | ${数组名[*]} |
---|
- | ${数组名[@]} |
统计数组中元素的个数 | ${#数组名[*]} |
- | ${#数组名[@]} |
统计数组中某一个元素的字符个数 | ${#数组名[下标]} |
4.3 两个数组的拼接
arr_new=(${arr_old1[*]} ${arr_old2[*]})
4.4 删除数组中的某一个成员
unset 数组名[下标]
unset 数组名
5.通配符
* | 代表任意多个字符(0或多个) |
---|
? | 代表任意一个字符(必须要有一个字符) |
[a-z] | 显示a-z之间的内容,必须要有一个位置 |
[a,c] | 匹配括号中出现的字符 |
[^a-z] | 除了中括号中出现的内容,其他的显示 #scanf("%[^\n]",arr); |
6.shell运算符
((表达式)) | 用于整型数的运算 |
---|
$[表达式] | 用于整型数的运算 |
expr | 可以进行整型数和字符串的运算 |
6.1 (()) 算术运算操作符
可以使用 $获取表达式的结果 $((表达式)) |
---|
(())中使用变量可以不加 $,自动解析变量 |
(())表达式可以很复杂 |
$((2*(i-1)+1)) |
6.2 $[ ]
1.中括号内可以有多个表达式,取最后一个表达式的结果作为输出 |
---|
2.表达式中如果有变量,可以使用$也可以不适用 |
3.只支持整型数运算 |
4.整个表达式不能单独出现,需要使用变量接收结果 |
$ [a+b] 错误 c=$[a+b] 正确 |
6.3 expr运算
1.可以将结果主动输出到终端 |
---|
2.expr在引用变量的时候需要加上$符号 |
3.expr在执行运算的时候,运算符的左右两边一定要有空格 |
4.expr不支持++、–运算 |
5.如果要将expr的计算结果赋值给一个变量,必须对整个表达式使用命令置换 |
a=expr b + c 这里有两个`包围起expr运算,但是打不出来 |
6.进行特殊运算需要转义 |
*乘法 (左括号 ) 右括号 <小于 >大于 |
7.expr不能进行幂运算 |
6.4 字符串的运算
math | expr match string regexp |
---|
~ | 在string中匹配regexp字符串,如果匹配成功返回匹配的个数,不成功返回0,只能在string字符串的开始位置匹配 |
index | expr index string chars |
~ | 查找chars字符中最先在string中出现的位置,返回字符的位置(从1开始) |
substr | expr substr string pos length |
~ | 对string字符串从pos位置开始截取,截取length个长度。 |
~ n