0
点赞
收藏
分享

微信扫一扫

Shell学习

ZGtheGreat 2022-03-11 阅读 87

Shell学习
我们一般说的shell默认是bash shell,也就是Bourne Again Shell (/bin/bash)

  1. Shell脚本名称一般一般以.sh结尾
  2. 不能使用特殊符号、空格
  3. 见闻之意,名称要写的一眼看出来功能
  4. Shell编程,首行需要 #!、bin/bash 开头
  5. shell脚本 变量 不能以 数字、特殊符号开头,可以使用下划线_,但是不能用-

echo输出命令

echo “要输出的内容”

-e : 支持反斜线控制的字符转换

echo -e "ab\bc"
输出:ac

更多的反斜杠如下:

控制字符作用
\\输出\本身
\a输出警告音
\b向左删除一位
\c取消输出行末的换行符。和“-n”选项一致
\eESCAPE建
\f换页符
\n换行符
\r回车键
\t制表符,也就是Tab键
\v垂直制表符
\0nnn按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh按照十六进制ASCII码表输出字符。其中hh是两位十六进制数
颜色输出\e**[1;31m** abcd \e[0m 输出abcd为红色 31m代表红色

颜色输出:

30m黑色
31m红色
32m绿色
33m黄色
34m蓝色
35m洋红
36m青色
37m白色

第一个脚本

cat shell.sh
#直接查看文件内容 加-A 查询隐藏得回车空格等

​ 在Windows上编译得脚本和在Linux上编译得脚本会存在一些差别,例如回车等,使用dos2unix后面加文件名进行格式转化。

Bash基本命令

history命令

-c:清除历史命令

-w:把缓存中得历史命令写入到历史命令保存文件 文件地址:~ /.bash_history


历史命令默认会保存1000条,可以在/etc/profile中进行修改

历史命令得调用

!n #重复执行第n条命令
!! #重复执行上一条命令
!字串 # 重复执行最后一条以该字串开头得命令

命令别名

顾名思义,给命令起别名

alias vi ='vim'
unalias 别名 #删除别名

alias 查询命令别名

这样设置得别名会在系统重启后失效,要想让别名永久生效,需要修改文件

vi /root/.bashrc

Bash常用得快捷键

ctrl+c强制终止当前得命令
ctrl+L清屏
ctrl+U删除或剪切光标之前的命令;K 删除或剪切光标之后的命令
ctrl+y粘贴ctrl+u或k的内容
ctrl+r搜索
ctrl+d退出当前终端

Bash基本功能-输入输出重定向

1.标准输入 键盘 0 标准输出 显示器 1 标准错误输出 显示器 2

输出重定向
类型符号作用
标准输出重定向命令 >>文件已覆盖的方式
标准输出重定向命令>>文件已追加的方式
标准错误输出重定向错误命令 2> 文件以覆盖的方式
标准错误输出重定向错误命令 2>> 文件以追加的方式

2和>>之间不能加空格

上述的这两种方式在实际的工作中作用不是很大,使用较多的是下面的命令:

正确输出和错误输出同时保存命令 > 文件 2>&1以覆盖,正确和错误输出都保存在一个文件
正确输出和错误输出同时保存命令 >> 文件 2>&1以追加,正确和错误输出都保存在一个文件
正确输出和错误输出同时保存命令 &>文件以覆盖,正确和错误输出都保存在一个文件
正确输出和错误输出同时保存命令 &>>文件以追加,正确和错误输出都保存在一个文件
正确输出和错误输出同时保存命令>>文件1 2>>文件2以追加,正确输出到文件1,错误输出到文件2

/dev/null 类似于windows中的垃圾箱,不想要的东西可以mv或者输出到该路径下。

输入重定向

wc [ 选项 ] [文件名]

-c 统计字节数

-w 统计单词数

-l 统计行数

多命令顺序执行与管道符

多命令执行符格式作用
命令1 ;命令2多个命令顺序执行,命令之间没有任何逻辑的联系
&&命令1&&命令2逻辑与,当命令1正确执行,才去执行2,当1执行不正确,则2不会执行。
||命令1||命令2逻辑或,当命令1执行不正确,则执行2,当1正确执行,则2不执行。

dd命令

dd if=输入文件(原文件) of=输出文件 bs=字节数 count=个数

选项:

if=输入文件 指定源文件或者原设备

of=输出文件 指定目标文件或者目标设备

bs=字节数 指定一次输出/输出多少字节,即把这些字节看作一个数据块

count=个数 指定输入/输出多少个数据块

例子:

date ; dd if=/dev/zero of=/root/testfile bs=1kb count=100000 date
#用输出的两次时间间隔来看系统创建100mb大小的文件需要多久
# /dev/zero  代表0

常用的命令格式:命令 && echo yes || echo no

理解下上面命令包含的含义

管道符

命令1 | 命令2

#命令1的正确输出作为命令2的操作对象,所以要求命令1必须要有正确的输出。

例子:

ll -a /etc/ | more

例子:

netstat -an | grep "established"
#查询所有的网络连接

grep的作用:搜索内容

grep “要搜索的内容” 搜索地址

选项:

-i:忽略大小写

-n:输出行号

🟥-v:反向查找,取反

–color=auto: 搜索出来的关键字用颜色显示

通配符和其他特殊符号

常见的通配符:

通配符作用
匹配任意一个字符
*匹配0个或多个任意字符,也就是匹配任意内容
[ ]匹配括号中任意一个字符
[ - ][1-9]代表匹配1-9中任意一个
[ ^ ]逻辑非,代表除了括号内的任意一个,[ ^0-9]代表匹配的是一个非数字的字符

$( ) 用来引用系统命令,在 Bash中会先执行它。

abc =$(date)
echo = abc
#输出当前系统时间

用户自定义变量

在Bash中,变量默认是字符串类型,如果要进行数值的计算,则必须指定变量未数值型。

变量的值有空格,需要将值用单引号或者双引号进行引用

变量分类

  1. 用户自定义变量
  2. 环境变量
  3. 位置参数变量
  4. 预定义变量

Bash数值运算与运算符

declare 声明变量类型

declare[+/-] [ 选项 ] 变量名

选项:

-: 给变量设定类型属性

+: 取消变量的类型属性

-i: 将变量声明为整数型

-x: 将变量声明为环境变量

-p: 显示指定变量的被声明的类型

最常见的还是使用 (( )) 这种形式

aa=11
bb=22
ff=$(($aa+$bb))
gg=$[$aa+$bb]
#上面这两种方式都可以直接进行述职计算,也是我们最常用的用法

正则表达式

元字符作用
*前一个字符匹配0次或任意多次
.匹配除了换行符外的任意一个字符
^匹配行首。例如: ^hello 会匹配以hello开头的行。
$匹配行尾。hello&会匹配以hello结尾的行
[ ]匹配括号中任意一个字符
[ ^ ]匹配非括号内的任意一个字符
\转义符,用于取消特殊符号的含义
\ {n\ }前面字符恰好出现n次,[0-9]\ {4 \ }匹配四位数字,[1] [3-8] [0-9]\ {9\ }匹配手机号
\ {n,\ }表示匹配前面的字符出现不小于n次,大于等于
\ {n,m\ }表示前面的字符最少出现n次,最多出现m次
[^0-9]\{2\}
[a-z]\{4\}
grep "a*" test_rule.txt # 正则表达式中*代表重复0次或者多次,记住这个0次。 所以这个查询会列出该文件所有的内容
grep "a..d" test_trle.txt #.点代表任意一个字符。所有s和d之间一定有两个字符的单词
grep "s.*d" test_rule.txt #s和d之间有任意字符
grep ".*" test_rule.txt #匹配所有内容
grep "^
[^0-9]\{2\}
[a-z]\{4\}
grep "a*" test_rule.txt # 正则表达式中*代表重复0次或者多次,记住这个0次。  所以这个查询会列出该文件所有的内容
grep "a..d" test_trle.txt #.点代表任意一个字符。所有s和d之间一定有两个字符的单词
grep "s.*d" test_rule.txt #s和d之间有任意字符
grep ".*" test_rule.txt #匹配所有内容
grep "^$" test_rule.txt #匹配空白行
grep "^[^a-zA-Z]" test_rule.txt #匹配不以字母开头的行
grep "\.$"  # 匹配以.结尾的行
quot;
test_rule.txt #匹配空白行
grep "^[^a-zA-Z]" test_rule.txt #匹配不以字母开头的行
grep "\.
[^0-9]\{2\}
[a-z]\{4\}
grep "a*" test_rule.txt # 正则表达式中*代表重复0次或者多次,记住这个0次。  所以这个查询会列出该文件所有的内容
grep "a..d" test_trle.txt #.点代表任意一个字符。所有s和d之间一定有两个字符的单词
grep "s.*d" test_rule.txt #s和d之间有任意字符
grep ".*" test_rule.txt #匹配所有内容
grep "^$" test_rule.txt #匹配空白行
grep "^[^a-zA-Z]" test_rule.txt #匹配不以字母开头的行
grep "\.$"  # 匹配以.结尾的行
quot;
# 匹配以.结尾的行

字符截取命令-cut命令

cut字段提取命令
cut [选项] 文件名
选项:
-f列号: 提取第几列,多列用逗号隔开,默认在制表符下生效
-d分隔符: 按照指定分隔符分割列,
cut -d ":" -f 1,3 /etc/passwd
#提取文件的1/3列
df -h #查看系统磁盘情况
df -h |  grep "sda5$" | cut -f 5  
#查询系统磁盘,然后得到dev/sda5行的结果,然后得到具体的一列。这个命令得到的结果不是我们想到要的,因为df -h查询出来的结果表格不是用制表符tab隔断的,而是用空格断开的。没法提取到第5列的数据,这个就是需要用到我们下面的awk命令。
举报

相关推荐

0 条评论