shell基础知识
1 自动化 运维
写shell脚本完成运维活动
2 shell
1 定义:
命令解释器(应用程序和操作系统之间的接口)
2 分类:
狭义上指的是命令行shell(linux下的bash)
3 查看shell信息
查看当前系统shell版本:
echo $SHELL
查看系统兼容性支持的其他版本:
cat /etc/shells
4 shell脚本
脚本执行方式:
命令写到文件中,直接执行文件(shell脚本---》shell命令们)
3 创建shell脚本:
1 创建工具:记事本(vim)
2 脚本命令:
1 名称有意义
2 .sh结尾(给程序员看的)
3 脚本内容
1 首行指定解释器#!/bin/bash
2 命令从上到下罗列
4 注释
单行注释: # 开头
多行注释: :<<字符 ... 字符 (将字符包含的内容重定向到啥都不干)
4 运行shell脚本
1 bash 脚本名(先启动子进程名字叫bash,在子进程中执行脚本内容)
解释器:bash
2 ./脚本名 (先启动子进程名字叫脚本名,在子进程中执行脚本内容)
解释器:#!指定的解释器-----》系统缺省shell
3 source 脚本名 (直接在当前shell执行脚本内容---》跟脚本内容复制粘贴执行的效果相同)
解释器:当前shell
5 变量
1 变量定义:
普通变量:
1 变量名=变量值 (变量值不能有特殊字符)
2 变量名='变量值' (变量值作为整体)
3 变量名="变量值" (变量套变量套变量)
命令变量:(命令的输出作为变量值赋给变量名)
变量名=`命令`
变量名=$(命令)
命令变量的值在定义时确定
2 变量访问
1 $变量名
2 "$变量名" (保证变量值是字符串)
3 ${变量名} (限定变量名范围)
4 "${变量名}" (推荐使用)
3 删除变量:
unset 变量名:
unset LANG (修改字符编码)
4 变量分类
1 本地变量
哪里定义哪里访问
2 全局变量(环境变量)
1 查看当前全局变量:
env
2 定义全局变量:
1,先定义后转换
变量名=值
export 变量
2 二合一
export 变量名=值
3 生效范围
当前shell和子shell生效
4 要想全部环境都生效:
1 修改~/.bashrc (打开终端后,系统会先source执行该文件)
source 执行~/.bashrc立即生效
打开新shell也生效
2 修改/etc/profile(所有用户生效,系统启动后,会source执行该文件,后续用户shell都继承自初始shell')
source 执行/etc/profile 立即生效
重启计算机也生效
3 内置变量
1 脚本相关内置变量
$0 脚本名
$$ 执行脚本的进程号
$n 第n个命令行参数
$# 参数个数
$? 上一条指令的返回值(0成功,非0失败---》若上一条指令是执行脚本,则获取脚本最后一条命令的返回值)
2 字符串截取
${变量名:起始位置:截取长度}
尾部截取:
${abc:0-5:3}
3 默认值
${变量名:-默认值}
若变量存在则输出变量值。否则输出默认值
${变量名:+提示信息}
若变量存在则输出提示信息,否则,啥都不输出
6 表达式
将逻辑转化成控制
1 测试语句
test 条件
[ 条件 ] (方括号内左右各有一个空格)
1 数值比较:
n1 -eq n2 相等
n1 -gt n2 大于
n1 -ge n2 大于等于
n1 -lt n2 小于
n1 -le n2 小于等于
n1 -ne n2 不等于
2 字符串比较
== !=
比较操作符左右各有一个空格
2 逻辑表达式
命令1 && 命令2 (1成功则执行2)
命令1 || 命令2 (1失败则执行2)
3 文件表达式
-f 判断是否是文件
-d 判断是否是目录
-x 判断是否可执行 (一般目录可执行)
4 计算表达式(支持整数运算)
$((计算过程))
let 等式
7 常见符号
1 重定向
命令的输出放到文件里
应用程序的输出:
1 标准输出(standard output)---》程序正确运行时的输出
2 标准错误(standard err)------》程序异常时的输出
1 分别重定向:
bash 5-chongdingxiang.sh > res.log 2>err.log
2 合并重定向
bash 5-chongdingxiang.sh > res.log 2>&1
3 丢弃:
bash 5-chongdingxiang.sh > /dev/null 2>&1
2 管道符
命令1 | 命令2
(1的标准输出作为2的输入---》命令2要有输入)
3 后台展示符
命令 & (将命令放到后台运行,释放当前终端)