目录
一、Shell脚本概述
1.1Shell基本概念
1.2 Shell脚本应用场景
二、shell编程规范
2.1 用户登录shell
2.2 shell 脚本的概念
2.3 shell 脚本的应用场景
2.5shell 脚本的作用
2.6类型
2.7查看支持不同类型的编码集
三,表达式
1.表达式的组成
1.1变量名
1.2声明规范
1.3声明方法
2.表达式的类型
2.1系统内置变量(环境变量) env编辑
2.2自定义变量
2.3位置变量
2.4预定义变量
2.5作用区域
2.6输出 echo $varName
三.shell中的字符串
四,运算符
4.1数学运算
4.2比较运算
4.2.1条件测试
4.2.2数值比较
4.2.3字符串比较
4.2.4文件比较
4.2.5逻辑运算符
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种Shell控制语句以完成更复杂的操作
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
登录后默认使用的shell程序,一般为/bin/bash
不同shell的内部指令、运行环境等会有所不同
1、将要执行的命令按顺序保存到一个文本文件
2、给该文件可执行权限
3、可结合各种Shell控制语句以完成更复杂的操作
总结:将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的
①重复性操作
②交互性任务
③批量事务处理
④服务运行状态监控定
⑤时任务执行
自动化完成软件的安装部署,如安装部署LAMP架构服务
自动化完成系统的管理,如批量添加用户
自动化完成备份,如数据库定时备份
自动化的分析处理,如网站访问量
sh ash bsh csh bash tcsh dsh zsh
查看系统中支持的shell cat /etc/shells
查看系统默认shell echo $SHELL
1.1.1不会变化
杯子 瓢 容器...
1. 2.1 不能是数字或数字开头
1. 2.2以_或字母开头
1. 2.3变量名中不能包含特殊字符
1.3.1驼峰式 userName
1.3.2双驼峰 UserName
1.3.3shell写法
user_name
username
USERNAME
2.2.1 varName=varValue
2.2.2等号两边不能有空格
2.2.3数字 var1=1
2.2.4字符串 shell中可以不使用引号 当包含有空格时,需要使用引号
2.2.5引号的用法
不会引用变量值 单引号 '
会应用变量值 双引号 "
引用命令结果 反撇号 `
$(命令) 应用场景较多
$1 ...... $9超过9无效
$0 脚本本身的名称
$# 脚本后参数的个数
$* 脚本运行时参数的内容(整体输出)
$@ 脚本运行时参数的内容(逐个输出)
$? 脚本运行完毕后的返回值
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量 export
string
赋值: str1=foodfornoting.gpg
1)获得字符串的长度
语法: ${#StringName}
案例: echo ${#str1}
输出结果:17
2)字符串取子串
语法: ${#StringName:position:lenght}
案例: echo ${str1:0:3}
输出结果:foo
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.1 + - * / % * 作为乘号时需要加转义符\
4.1.2运算方法
expr expr $a + $b
$[a+b] echo $[a+b]
4.1.3注意 shell不支持浮点数的显示
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.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.1 = 字符串一致
检查两个字符串是否相等:如果一致则输出相等
4.2.3.2!= 字符串不一致
检查两个字符串是否不一直:如果不一致输出不相等
4.2.3.3-z 字符串为空
检查字符串是否为空:如果var1为空则输出字符串为空
4.2.3.4! -z 字符串不为空
检查字符串是否不为空:不为空则输出字符串不为空
创建一个文件名为: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.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 或者,有真则真,全假为假
! 取反 有真则假,有假则真