目录
shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的,就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。 脚本就是将手动一次性执行的命令进行规范且自动化
一、shell类型
shell命令解释环境
类型
sh、ash、bsh、csh、bash、tcsh、dsh、zsh等
查看系统中支持的shell
cat /etc/shells
查看系统默认shell
echo $SHELL
二、变量
一、组成
一、变量名
不会变化
声明规范
不能是数字或数字开头
以_或字母开头
变量名中不能包含特殊字符
声明方法
驼峰式 如 userName
双驼峰式 如 UserName
shell写法 user_name
username
USERNAME
二、变量值
不断变化 可以是数字、字符
二、类型
一、系统内置变量(环境变量)
如 env
二、自定义变量
例如 varName=varValue
等号两边不能有空格
数字
var1=1
字符串
shell中可以不使用引号
当包含有空格时,需要使用引号
引号的用法
不会引用变量值 单引号 '
会应用变量值 双引号 "
引用命令结果 反撇号 ` $(命令) 应用场景较多
三、位置变量
脚本后参数所在的位置
$0 | 表示自身 |
$1 | 表示位置参数 |
$@ | 表示所有参数的列表 |
脚本内只能设置九个位置变量 | 脚本外不受限制 |
四、预定义变量
$0 | 脚本本身的名称 | |
$# | 脚本后参数的个数 | |
$* | 脚本运行时参数的内容(整体输出) | |
$@ | 脚本运行时参数的内容(逐个输出) | |
$? | 脚本运行完毕后的返回值 | 0 成功 非0 失败 |
五、作用域
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量 export
六、shell中的字符串
获得字符串的长度
赋值: str1=foodfornoting.gpg
语法: ${#StringName}
案例: echo ${#str1}
输出结果:17
字符串取子串
语法: ${#StringName:position:lenght} (lenght没有定义时输出全部)
案例: echo ${str1:0:3}
输出结果:foo
字符串的截取
从左至右截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName##*string}
案例: echo ${str1##*fo}
输出结果:rnoting.gpg
从左至右截取第一个匹配字符串string之后的所有字符串
语法: ${StringName#*string}
案例: echo ${str1#*fo}
输出结果:odfornoting.gpg
从右至左截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName%%string*}
案例: echo ${str2%%o*}
输出结果:f
从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}
案例: echo ${str2%o*}
输出结果:foodforn
字符串的拼接
语法: StringName3=${StingName1}${StringName2}
案例: str1=Hello
str2=,Jack!
str3=${str1}${str2}
echo ${str3}
输出结果: Hello,Jack!
字符串替换:
语法: ${StringName/OldString/NewString}
案例: str1=foodfornoting.gpg
echo ${str1/oo/kk}
输出结果:fkkdfornoting.gpg
三、运算符
一、数学运算
+ - * / % * 作为乘号时需要加转义符\
运算方法
expr expr $a + $b
$((a+b)) echo $((a+b))
$[a+b] echo $[a+b]
shell不支持浮点数的显示
二、比较运算
一、数值比较
-eq 等于
-ne 不等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
test 测试
二、字符串比较
= 字符串一致
!= 字符串不一致
-z 字符串为空
!-z 字符串不为空
三、文件比较
-e 文件或目录是否存在
-f 是否为文件
-d 是否为目录
-r 判断文件是否可读
-w 判断文件是否可写
-x 判断文件是否可执行
四、 逻辑运算符
&&
[ $a -ne $b ] && echo OK 条件 && 输出结果
条件为真输出
||
[ $a -ne $b ] || echo OK 条件 || 输出结果
条件为假输出
! 取反
有真则假,有假则真
四、shell
编写规范
第一行 #!/bin/bash
第二行 #脚本的说明
第三行 脚本正文
shell运行规则
没有x权限
bash 脚本所在路径/脚本文件
source 脚本所在路径/脚本文件
. 脚本所在路径/脚本文件
脚本存在cd 时,会切换到目标目录
有x权限
./脚本文件
脚本绝对路径/脚本文件
shell脚本运行追踪 bash -x 脚本所在路径/脚本文件
echo $[$RANDOM]
echo $[$RANDOM] 随机生成数字
seq
seq 序列排出数字
seq 1 10 返回1到10 的连续数字