Linux-shell编程
shell脚本介绍
所有命令都在/usr/bin/目录下,命令文件都是二进制文件.输入which ls 即可查看该命令的别名含义
/bin/sh 和 /bin/bash 都是用的bash解释器
yum是用 python开发的
相对路径./代表执行的意思,因为没有执行权限,可chmod +x 赋予执行权限,如果不指定shell解释器,就用当前默认解释器执行
报错解决方法:针对shebang错误的解释器,找不到执行文件有两种方式解决:
1:绝对路径正确的解释器:如/bin/python 文件.py
2:把shebang声明的解释器修改成正确的解释器
shell脚本规范
弱类型语言就是:定义变量的时候,不用主动声明该类型,即不用规定类型.
强类型语言:需要指定变量的数据类型,必须对上否则报错.
-
第五节 Bash用法
bash特性
保留3000个历史记录的变量
存放历史使用命令的文件
history
-c 清空历史
-r 恢复历史
!+历史ID 快速执行历史命令
!!执行上次的命令
ctrl+l 快捷清屏
第六节变量
pstree逐层分析进程
左边第一个sshd进程 对应下面第一个sshd服务,代表的是服务器上启动的sshd服务
左边第二个sshd进程 对应下面第二个,代表以root身份远程访问的进程
左边第三个bash进程 是因为Linux是用shell管理的,而shell默认使用bash解释器,操作界面就是在bash下进行,操作的pstree这个命令
以后定义变量最好加上双引号
sh 回车 #进入子shell
父shell是bash ,子shell是sh
echo $? 常用于脚本中,判断上一条命令是否执行正确.
可以看出父shell和子shell的环境变量一致
第七节 父子shell的面试题
这三种定义变量名都可以
但是
用bash执行脚本,开启子shell,脚本定义的变量是在子shell里变量.所以父shell里的变量未变
答案是C,因为执行脚本,sh开启了子shell,父shell里的变量没有被定义
`linux`
在linux中,反引号中命令执行结果会被保留下来.
make_vars.sh 里内容是
user1=`whoami`
第八节 环境变量
用户家目录下文件.bash_profile
如果这个.bashrc文件存在,就先执行.bashrc这个文件,export让变量生效
在该文件里,定义了name变量
第一次,输入变量名未显示,因为当前用户文件还未更新,重新登录,即可加载bash_profile文件,从而显示name变量
切换到root,name变量的值和刚才不一样,因为之前是在yuchao的环境变量定义的name变量
就是如果你在root下定义了name的全局变量,但是自己用户下也有同名的name环境变量,当你输出变量时,优先显示自己用户下定义的环境变量.
clear清屏
wc -l 显示有多少行
unset 取消变量
取出环境变量里的变量名
第九节 特殊变量
实践脚本
执行结果
第十节 特殊状态变量
执行结果
让命令在后台执行,且日志写在黑洞文件
获取上一次后台执行的 程序 ,PID, $!获取
$$获取当前脚本的PID
第十一节 简单的内置shell命令
内置命令就是任何Linux发行版,都有的命令
执行完命令,从yuchao用户退出到root用户界面
第十二节 shell字串的花式语法
第十三节 子串的实际案例
第十四节 计算变量长度的玩法
wc -l 统计行数 wc -L 统计长度最长那行并且输出原数个数
第十五节 统计命令执行的时长
把多行命令写在一行,用;隔开.
seq 生成序列的命令 seq -s 指定分割符
for n in {1..3} 1..3表示循环3次
do str1=`seq -s ":" 10`; do 就是在循环体中干什么了,循环体中就是定义一个变量,反引号取到命令的结果.
echo $str1 打印变量
done结束循环体
把输出的结果写入黑洞文件
使用了管道符,执行时间一定会变长
第十六节 字符串截取
unset str1(变量名) 取消变量值
第十七节 批量修改文件名
创建文件名时:{1..5} 表示1-5
针对ngix产生的有规律的文件,可用此方法进行替换
第十八节 提升扩展变量
第十九节 实际案例
第二十节 父子shell
作者做了一个alias别名,免密登录
要区分清楚父子进程和父子shell的区别
下图是父子进程
下图是父子shell
记住常用clear清屏
第二十一 shell内置外置命令
第二十二节 shell脚本开发
报错原因是 括号内 date命令已经执行,然后把执行结果传给了bash解释器,解释器不识别这个结果,认为不是合法命令,所以报错
在echo命令中,引用了date命令的结果用法,引用方式就是$()
同理,单引号提取命令结果也是此原理
第二十三节 shell的数值计算
后面if,else逻辑运算会用到.
记住想获取双小括号内的值,必须加$符号
第二十四节 数值计算脚本开发
a++:是先打印a的值,打印完再加1.所以再次输入,就变成了7
read -p 输入得数字直接赋值给后面得变量
第二十五节 Let命令计算
Let命令进行语法转义
第二十六节 开发nginx存活检测脚本
命令写在一行,用分号;
while true 一直执行命令,wget --tries是重连机制,-q是浸没输出,-o是把结果输出到指定文件
exit 0 返回状态码的使用,是结果更明确
若命令写在一行用;通过shift+%,可以找到括号对应的另一半
定义了函数,脚本里也得调用该函数才能实现
第二十七节 expr命令
第二十八节 expr命令实例
for循环,str1是变量,in后面表示循环体
echo打印自带换行
用``反引号引入命令执行的结果
第二十九 数学计算命令完结![](https://i-blog.csdnimg.cn/direct/d38fa8c7808d47758b5b547e1348d797.png)
tr替换语法
如果不加分隔符,"+",默认就是换行
第三十节 Shell条件测试开篇
read命令,后面根变量,意思是输入的值赋值给后面的变量
第三十一节 shell条件测试
第三十二节 test命令实践
写的好的脚本都会使用到条件判断, 比如说这个启动文件脚本
中扩号和test语法一样,用于条件判断
第三十三节中括号的条件判断
第三十四节 如何阅读优秀脚本
中括号语法和test语法一样
分析系统自带脚本
第三十五节 字符串比较测试
中括号内,条件判断 "=" 两边必须有空格,如果变量赋值的话不需要空格.
第三十六节:数值比较符号
第三十七节 逻辑判断符号
-n 参数 判断如果$a不为空
第三十八节 逻辑运算实战开发
花括号里写入自己要执行的命令
用exit返回状态吗,从而可以判断哪一步有问题
第三十九节 趣谈逻辑脚本开发
cat命令的重定向写入符,可以在用户界面显示内容
第四十节 if语句开发
第四十一节 if实践
第四十二节 if实战开发
第四十三节 开发mysql监控脚本
netstat -tunlp 本地服务器tcp,udp所有的连接情况
有时端口号科能被改了,改成服务名
ss用法和netstat用法一样
第四十四节 学习php和python连接mysql
vim编辑模式,输入:set paste 可以直接把内容复制过来
上面的脚本有报错
第四十五节 shell脚本检测MySQL服务状态
第四十六节 开发rsync管理脚本
执行有报错
第四十七节 函数是什么
查看系统所有别名
第四十八 函数实际开发
定义函数必须写上function
第四十九节 函数实践
第五十节 shell环境于函数执行
chao上面有^表示以chao开头的字符
source只争对于当前shell环境
第五十一节 函数脚本传入参数
脚本处理用户函数流程图
第五十二节 函数实战开发
wget -q -o 浸没输出
改造脚本
第五十三节 Rsync脚本开发
该路径下存放服务文件
/usr/bin/rsync --daemon 在后台开启服务
关闭服务
类似的用法说明
脚本执行