Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈个用户,这种对话方式可是交互也可是非交互的,我们所输入的命令计算机是不是别的,这是就需要一种程序来帮助我们进行翻译,编号才能计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
linux系统中的shell是一个特殊的应用程序,它介于 操作系统和用户的之间,充当一个”命令解释器“的角色,负责输入的操作指令,并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
常见的shell解器有很多中,使用不同的shell,其内部指令、命令性提示符等方面会存在一些区别,通过/etc/shells 文件可以了解当前系统所支持的shell脚本种类。
.bash_profile .bashrc 用户的环境变量
shell是linux默认解释器
shell脚本
shell脚本概述
shell的作用 shell编程规范 重定向与管道
shell脚本变量
自定义变量 特殊变量
shell脚本的概念
将要执行的命令按顺序保存到一个文本文件 给改文件可执行权限 可结合各种shell控制语句以完成更复杂的操作
free -m available 约等于 buff/cache加free
缓冲区不会拖累主进程 缓存先下载本地 下次访问时直接在缓存区读就可以了 缓存用于读 缓冲用于写 缓冲是高性能到低性能的数据传输时可以由性能更佳的一方先将数据写到缓存里面等待性能低的一方 过来读取的时候直接在缓存里面读取就可以了 提高高性能方的效率 节省高性能方的资源消耗 缓冲的数据并没有被读取 不安全 缓存区复用时资源减少,性能提高
脚本执行的时候 sh -x 这个-x表示调试 只是把每一条执行的结果打出来
source 表示的是加载/刷新环境 会把环境中的命令指令执行一次
只有以纯路径方式执行的脚本才需要执行权限
标准输入0 键盘敲命令 标准输出1 能输出的正确结果显示在显示器上给用户看 错误标准输出2 未找到命令也会在显示器上显示出来
文件编号012 文件描述符 相当于指向一个文件位置用的
简单理解
管道 连接两条指令/命令 将前一个命令的结果输出给第二个命令来二次使用
#!/bin/bash (默认解释器) 脚本最上面的环境
以#为开头的语句表示注释 被注释的语句在脚本运行时不会被执行
重定向输出 结果路径的改写
uname -p 输出处理器类型
使用重定向输入时 后面应该是一个可读的
<<EOF 结束或者分界符 EOF 定义结尾的部分
cat > 1.txt <<EOF
>111
>222
>EOF
然后cat 1.txt
会显示
111
222
首先>表示输出到1.txt文件里面的去写内容 如果没有1.txt这个文件就会创建一个 <<表示分界符 EOF表示结束的词 输入这个EOF或者0就会结束 正常情况下可以用tcl+z 结束 但是脚本里面不可以 所以追加脚本内容的时候 可以用<<加一个结束词 更方便
2> 错误重定向 把错误的提示信息注入到指定文件 不会显示出来 2>>表示追加注入
/dev/null 黑洞
stdin 标准输入
stdout 标准输出
stderr 标准错误输出
重定向是指 路径或者文件对象的改变
&表示混合
2>&1 表示把错误的输出结果注入到一个文件里 所以不会直接显示出来 但是可以查看文件看到报错信息 前面要指定输出的文件文件位置 也可以反着来 把正确的输出到错误里 (要指定文件)
管道符左边是管道符右边的父进程 pipe管道
左边输出的位置是管道的入口 管道会把输出的结果给子进程的输入
子进程会把左边的结果作为参数来处理
grep过滤 匹配
awk 打印 -F: 表示指定分割符 先写一个‘ ’ {print$1,$7} 打印第一列和第七列
date +‘%F %T' 时间
环境变量
普通用户的家目录是.bashrc里面定义的
UTF-8 中文
zs=l6
echo $zs (输出的时候取这个变量名的变量值的时候前面要加$)
l6
只读变量
一个简单的脚本
1.sh 脚本名字
#!/bin/bash/ 进去编辑
ehco “$1吃了$2”
sh 1.sh $1 $2 sh不需要给执行权限执行 参数之间只接受以空格为分割 $1 $2 $3 都是参数
会输出结果 $1 吃了 $2
要搞一个变量文件 在很多脚本的情况下 先加载变量文件 就不需要一个一个去更改变量了 省时省力
一个简单的加法脚本
#!/bin/bash
x=`expr $1 + $2` $1+$2
echo "$1 + $2 = $x" 输出$1+$2=$x这个值
sh xx.sh 8888 9999 执行脚本 并定义$1和$2的值 8888 9999
8888 + 9999 = 18887 输出的结果 加法呈现出来