什么是Shell?
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序
简单来讲,Shell是连接用户与内核的桥梁,是用户与内核交流的工具
⚠️开发注意
- 1)开头加解释器:#!/bin/bash
- 2)语法缩进,使用四个空格;多加注释说明
- 3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用
- 4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域
- 5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程
- 6)写脚本一定先测试再到生产上
Shell Variable(变量)
- 变量赋值:
- 不能使用保留字
- for 循环变量赋值:
- for filename in
ls -l /etc
- for filename in $(ls -l /etc)
- for filename in
- 删除变量:unset $var
变量类型
不同点
- 单:原样输出,变量无效
- 双:可饮用变量,可转义字符
- 相同点
- 两者皆可拼接字符串
- 获取字符串长度
取得数组单个元素的长度
echo ${arraynaem[n]}
<a name="XQ9EZ"></a>
### 多行注释
```shell
:<<EOF
注释内容。。。。
EOF
:<<'
zhushiniernong.....
'
shell 进阶命令
- grep abc *.pc 文件内容中查找abc
- grep –c abc *.txt 查找内容abc,并统计
- grep –i abc *.txt 查找内容abc,大小写不敏感
- diff abc.txt /usera/def.txt 比较文件
- find . –name “abc*” 目录中查找文件
- ps –ef|grep UserA 列出某用户的进程
- shellABC.sh > abc.log 覆盖输出
- shellABC.sh >> abc.log 追加输出
- netstat –i 查看网卡
- netstat –r 查看路由
- netstat –an|grep 52 查看包含52的端口网络状态
- ctrl r 在命令历史中查找
- du -s * | sort -n -r 当前目录里的文件和文件夹按大小排序排列
- ls –l|grep ‘^d’ 列出目录
- ls –l|grep ‘^[^d]’ 列出非目录
vi 命令
- Kjhl 上下左右
- i 进入插入模式, r 进入替代模式
- A 到行尾并Append,
- a 进入Append输入模式
- O 在本行上新增一行
- o在本行下新增一行
- :%d 删除所有文本
- :sh 执行外部shell
- :389 跳到389行, :1 跳至文件头 shift+g,跳至页尾
- :set nu 打印行号
- Ctrl+f 向下翻页, Ctrl+b 向上翻页
- ^ 移动至行首 $ 移动至行末
- / 向下查找,? 向上查找 (继续按则查找下一个)
- // 重复上次查找
- Esc 退出编辑或插入模式
- X 删除后一个,x 删除前一个
- :1,%s/abc/def/g 替换abc为def
- :1,$s/^M//g (转换控制字符^M, 用Ctrl+V, Ctrl+M输入)
- dd删除一行
- J 删除一行带回车
- Yy 复制一行, p粘贴
🔗参考博客
https://www.jianshu.com/p/9eadd8d80d03
https://www.cnblogs.com/Mainz/articles/1027168.html