目录
一、Shell脚本概述
1.1Shell基本概念
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种Shell控制语句以完成更复杂的操作
1.2 Shell脚本应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
二、shell编程规范
2.1 用户登录shell
登录后默认使用的shell程序,一般为/bin/bash
不同shell的内部指令、运行环境等会有所不同
2.2 shell 脚本的概念
1、将要执行的命令按顺序保存到一个文本文件
2、给该文件可执行权限
3、可结合各种Shell控制语句以完成更复杂的操作
总结:将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的
2.3 shell 脚本的应用场景
①重复性操作
②交互性任务
③批量事务处理
④服务运行状态监控定
⑤时任务执行
2.5shell 脚本的作用
自动化完成软件的安装部署,如安装部署LAMP架构服务
自动化完成系统的管理,如批量添加用户
自动化完成备份,如数据库定时备份
自动化的分析处理,如网站访问量
2.6类型
sh ash bsh csh bash tcsh dsh zsh
查看系统中支持的shell cat /etc/shells
查看系统默认shell echo $SHELL
2.7查看支持不同类型的编码集
三,表达式
1.表达式的组成
1.1变量名
1.1.1不会变化
杯子 瓢 容器...
1.2声明规范
1. 2.1 不能是数字或数字开头
1. 2.2以_或字母开头
1. 2.3变量名中不能包含特殊字符
1.3声明方法
1.3.1驼峰式 userName
1.3.2双驼峰 UserName
1.3.3shell写法
user_name
username
USERNAME
2.表达式的类型
2.1系统内置变量(环境变量) env
2.2自定义变量
2.2.1 varName=varValue
2.2.2等号两边不能有空格
2.2.3数字 var1=1
2.2.4字符串 shell中可以不使用引号 当包含有空格时,需要使用引号
2.2.5引号的用法
不会引用变量值 单引号 '
会应用变量值 双引号 "
引用命令结果 反撇号 `
$(命令) 应用场景较多
2.3位置变量
$1 ...... $9超过9无效
2.4预定义变量
$0 脚本本身的名称
$# 脚本后参数的个数
$* 脚本运行时参数的内容(整体输出)
$@ 脚本运行时参数的内容(逐个输出)
$? 脚本运行完毕后的返回值
2.4.1默认情况
0 成功
非0 失败
2.5作用区域
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量 export
2.6输出 echo $varName
三.shell中的字符串
string
赋值: str1=foodfornoting.gpg
1)获得字符串的长度
语法: ${#StringName}
案例: echo ${#str1}
输出结果:17
2)字符串取子串
语法: ${#StringName:position:lenght}
案例: echo ${str1:0:3}
输出结果:foo
注意:lenght没有定义时,一直取到字符串的结尾!
3)字符串的截取
a)从左至右截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName##*string}
案例: echo ${str1##*fo}
输出结果:rnoting.gpg
b)从左至右截取第一个匹配字符串string之后的所有字符串
语法: ${StringName#*string}
案例: echo ${str1#*fo}
输出结果:odfornoting.gpg
c)从右至左截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName%%string*}
案例: echo ${str%%o*}
输出结果:f
d)从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}
案例: echo ${str2%o*}
输出结果:foodforn
4)字符串的拼接
语法: StringName3=${StingName1}${StringName2}
案例: str1=Hello
str2=,Jack!
str3=${str1}${str2}
echo ${str3}
输出结果: Hello,Jack!
5)字符串替换:
语法: ${StringName/OldString/NewString}
案例: str1=foodfornoting.gpg
echo ${str1/oo/kk}
输出结果:fkkdfornoting.gpg
四,运算符
4.1数学运算
4.1.1 + - * / % * 作为乘号时需要加转义符\
4.1.2运算方法
expr expr $a + $b
$((a+b)) echo $((a+b))
$[a+b] echo $[a+b]
4.1.3注意 shell不支持浮点数的显示
4.2比较运算
4.2.1条件测试
test var1 比较符 var2
[ var1 比较符 var2 ]
&& [ $a -ne $b ] && echo OK 条件 && 输出结果 条件为真输出
var1=1,var2=2 不等于输出ok
|| [ $a -ne $b ] || echo OK 条件 || 输出结果 条件为假输出
var1=2,var2=2 不等于输出ok
4.2.2数值比较
4.2.2.1设置var1=2,var2=2
4.2.2.2 -eq 等于
var1等于var2则输出a等于b
4.2.2.3 -ne 不等于
var1不等于var2则输出a不等于b
4.2.2.4 -lt 小于
var1小于var2则输出小于等于
4.2.2.5-le 小于等于
var1小于等于var2则输出var1小于等于var2
4.2.2.6-gt 大于
var1大于var2则输出var1大于var2
4.2.2.7-ge 大于等于
var1大于等于var2则输出var1大于var2
4.2.3字符串比较
4.2.3.1 = 字符串一致
检查两个字符串是否相等:如果一致则输出相等
4.2.3.2!= 字符串不一致
检查两个字符串是否不一直:如果不一致输出不相等
4.2.3.3-z 字符串为空
检查字符串是否为空:如果var1为空则输出字符串为空
4.2.3.4! -z 字符串不为空
检查字符串是否不为空:不为空则输出字符串不为空
4.2.4文件比较
创建一个文件名为:123
4.2.4.1 -e 文件或目录是否存在
检查文件或目录是否存在:存在则输出文件或目录存在
4.2.4.2 -f 是否为文件
检查是否为文件:是文件则输出是一个文件
4.2.4.3 -d 是否为目录
检查是否为目录:是目录则输出是一个目录
4.2.4.4 -r 判断文件是否可读
检查是否可读:是则输出文件可读
4.2.4.5 -w 判断文件是否可写
检查文件是否可写:是则输出文件可写
4.2.4.6 -x 判断文件是否可执行
检查文件是否可执行:是则输出文件可执行
4.2.5逻辑运算符
4.2.5.1&&
-a 并且,有假则假,全真为真 [ -r 111 -a -w 111 -a -x 111 ] [ -r 111 ] && [ -w 111 ] && [ -x 111 ]
[ -x /root/file1 -a -d /root/file1 ]
[ -x /root/file1 ] && [ -d /root/file1 ]
4.2.5.2||
-o 或者,有真则真,全假为假
! 取反 有真则假,有假则真