Linux-shell编程学习 -超哥教育

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脚本规范

弱类型语言就是:定义变量的时候,不用主动声明该类型,即不用规定类型.

强类型语言:需要指定变量的数据类型,必须对上否则报错.

  1. 第五节 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打印自带换行

用``反引号引入命令执行的结果

第二十九 数学计算命令完结

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    在后台开启服务

关闭服务

类似的用法说明

脚本执行

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值