淄博市沂源县建设局网站,南京做企业网站,惠州seo招聘,国际域名注册局注意#xff1a;该文章摘抄之百度#xff0c;仅当做学习笔记供小白使用#xff0c;若侵权请联系删除#xff01; 目录
什么是shell ?
Linux正则匹配
grep
tar与unzip
echo
history
重定向
shell 单双引号
位置参数
预定义变量
运算
正则表达式
字符截取命令 …注意该文章摘抄之百度仅当做学习笔记供小白使用若侵权请联系删除 目录
什么是shell ?
Linux正则匹配
grep
tar与unzip
echo
history
重定向
shell 单双引号
位置参数
预定义变量
运算
正则表达式
字符截取命令
awk 命令
seq 命令
整数比较
多重条件判断
if 判断
case 判断
for 循环
while 循环
until 循环 什么是shell ? 定义shell是一个命令行解释器为用户提供一个向linux 内核发送请求以便远程程序的界面系统级程序用户可以用shell来启动、挂起、停止及编写程序 Linux正则匹配 正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串简单来说是一种匹配字符串的方法通过一些特殊符号实现快速查找、删除、替换某个特定的字符串。 shell三剑客grepsedawk grep
grep [选项] [查找条件正则] [目标文件]-E开启扩展的正则表达式
-c计算找到搜寻字符串的次数
-i忽略大小写的不同所以大小写视为相同
-o只显示被漠视匹配到的字符串
-v反向选择即输出没有匹配到的那些字符
--colorauto可以将找到的关键词部分加上颜色的显示
-n顺便输出行号
-w表示精确匹配一个字符 元字符
^ 匹配输入字符串的开始位置。除非在方括号表达式中使用表示不包含该字符集合。要匹配^字符本身需要转移^
$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性则$也匹配\n或r
. “.”代表除\n\s之外的任何单个字符
\ 反斜杠又叫转义字符去除其后紧跟的元字符或通配符的 特殊意义
匹配前面的子表达式零次或多次。要匹配*字符要进行\转移
n和m均为非负整数其中nm最少匹配n次最多匹配m次 grep查找特定的字符
grep -n the test.txt grep -vn the test.txt #匹配除了包含the的行
使用[]来查找集合字符 eg: 要查找short和shirt时 比如我们要查找“shirt”与“short”这两个字符串时可以发现这两个字符串均包含sh与rt。 此时执行下面命令可以提示查找到“shirt”和“short”这两个字符串其中“[]”无论有几个字符都代表一个字符 但是会按照[]内的每个字符都去做一次匹配比如[io]表示要匹配i或者o。 grep -n sh[io]rt test.txt 查找oo前面不是w的字符串 若查找“oo”前面不是“w”的字符串只需要通过集合字符的反向选择“[A]”来实现该目的。 例如执行“grep -n‘[^w]oo’test.txt”命令表示在 test.txt 文本中查找“oo”前面不是“w”的字符串。 grep -n [^w]oo test.txt tar与unzip tar -f备份文件或--file备份文件 指定备份文件。 -v或--verbose 显示指令执行过程。 -x或--extract或--get 从备份文件中还原文件。 -z或--gzip或--ungzip 通过gzip指令处理备份文件。 unzip -l 显示压缩文件内所包含的文件。 -v 执行时显示详细的信息。 echo
echo [param] [content]
-e # 开启转义对反斜杠控制的字符转换
echo -e \n # 显示换行
echo date # 显示命令执行的结果
history
history [param][file]
-c # 清空历史命令
-w # 写入文件
历史命令的调用
n # 重复执行第n条历史命令# 重复执行上一条命令
字符串 # 重复执行最后一条以该字符串开头的命令
Bash快捷键crtlA 转前 crtlE 转后 crtlR 搜索历史命令 crtlZ 放到后台运行crtlK 剪切光标后 crtlU 剪切光标前 crtlY 粘贴前面的内容
重定向
# 输入输出重定向
# # 标准类型# 重定向文件会覆盖 # 追加向文件会追加
# # 错误类型
error command 2 文件 # 覆盖命令的错误输出
error command 2 文件 # 追加命令的错误输出
# # 正常和错误同时保存
command file 21 # 覆盖错误及正常的保存同一文件
command file 21 # 追加错误及正常的保存同一文件
command $ file # 覆盖错误及正常的保存同一文件
command $ file # 追加错误及正常的保存同一文件
command file1 2file2 # 正确的追加到文件1错误追加到文件2
shell 单双引号
# shell 的单双引号
[rootlocalhost ~]# nameabc
[rootlocalhost ~]# echo $name
$name
[rootlocalhost ~]# echo $name
abc
变量设置规则
变量名称可以由字母、数字和下划线组成但不能以数字开头。
变量的默认类型都是字符串型
变量用等号连接值等号左右两侧不能有空格。
变量的值如果有空格需要使用单引号或者双引号苦括起来。
不能使用标点符号
位置参数
# 熟悉
$n # 对应参数
$* # 所有的参数作为一个整体
$ # 所有的参数单独作为
$# # 所有参数的个数
[rootlocalhost ~]# vim canshu02.sh
#!/bin/bashecho $0 #表示接受命令本身
echo $1 #接受第一个参数
echo $2 #接受第二个参数
echo $3 #接受第三个参数[rootlocalhost ~]# ./canshu02.sh 111 222 333
./canshu02.sh
111
222
333
[rootlocalhost ~]# vim canshu03.sh
#!/bin/bashsum$(( $1$2 ))
echo sum is : $sum#举例说明$*和$的区别
[rootlocalhost ~]# vim canshu04.sh
#!/bin/bash
for i in $*doecho $idonefor y in $doecho $ydone[rootlocalhost ~]# ./canshu04.sh 111 222 333 444
111 222 333 444
111
222
333
444
#$*将所有参数看成一个整体$传递的每个参数区分对待
预定义变量
$? # 上一次执行结果的状态
$$ # 当前进程的PID
$! # 后台运行的最后一个进程号 PID
运算
# 数值运算
declare [param] name
- # 给变量设定类型属性# 取消变量的类型属性
-i # 声明整型
-x # 将变量声明未环境变量
-p # 显示被声明的类型#给变量aa和bb赋值
[rootlocalhost ~]# aa111
[rootlocalhost ~]# bb222
[rootlocalhost ~]# declare -i cc$aa$bb 同 cc$(expr $aa $bb ) [注意“”号左右两侧必须有空格]同 cc$(( $aa$bb ))
正则表达式
* # 匹配0次或多次
. # 匹配除换行符的任意一个字符
[] # 匹配中括号中指定一个任意一个字符只匹配一个
[^] # 匹配除中括号的字符以外的任意一个字符
\{n\} # 表示前面的字符恰好出现n次eg: [0-9]\{4\} 匹配4位数字
\{n,\} # 表示至少匹配字符不少于n次
\{n,m\} # 匹配字符出现在[n-m]次
注意grep 匹配加\egrep 转义无需加 \
字符截取命令
cut [param] filename
-f # 列号
-d # 分隔符第一列从1开始
eg: command | cut -d | -f 1 # 匹配以|分隔的第一列字符
注意cut 不可以用空格作为分隔符只用作制表符分割
awk 命令
awk pattern file {print $n} # 打印第n列数据
eg: df -h | awk {print $1 \t $5} # 打印提取第一列和第二列eg: df -h | awk {print $5} | cut -d % -f 1 # 查看占用百分比截取%
seq 命令
sed [param] action filename
# param
-n # 只打印经过sed命令处理的数据
-e # 容许输入多条sed命令编辑
-i # 用sed修改结果直接修改读取数据,文件改变
# action
a\ # 追加
c\ # 行替换
i\ # 插入
d # 删除指定的行
p # 打印指定的行
s # 字符串替换格式行范围s/old_str/new_str/geg:
sed -n 2p test.log # 查看第二行数据
sed 1,3d test.log # 查看除1-3行的数据
sed 3a hello test.log # 增加第三行的hello输出数据
# replace
sed 3s/oot/eet/g my.log # 将第三行的oot改变为eet输入
sed -i 3s/oot/eet/g my.log # 将第三行的oot改变为eet文件改变
整数比较
[1 -param 2] ehco yes || echo no
# param
-eq #
-ne # !
-gt #
-lt #
-ge #
-lt #
多重条件判断
# 字符判断
-z str # 判断是否为空
-n str # 判断是否非空
-a #
-o # |
eg:
[ -n $aa -a $aa -gt 23 ] echo yes || echo no # 打印 yes
if 判断
if [conition];thenpass
fieg:
#统计首个程序根分区使用率
rate$(df -h | awk {print $5} | cut -d % -f 1 | head -n 1)if [ $rate -ge 20 ]then
echo error 10
fi
# if--else多条件
if [conition]thenpass
elifthenpass
else thenpass
fi
# 单条件
if [conition]thenpasselsepass
fi
case 判断
# case语句case $变量名 in值1)如果变量的值等值1则执行程序1;;值2)如果变量的值等值2则执行程序2;; ……省略其他分支*)如果变量的值都不是以上的值则执行程序;;
esac举例#!/bin/bash
#测试case语句echo 如果想去上班请输入“1”
echo 如果不想上班请输入“2”
echo 如果想居家办公请输入“3”read -t 30 -p 请输入你的选择: choose
case $choose in1)echo 想去上班;;2)echo 不想去上班;;3)echo 居家办公;;*)echo 只能输入1或者2或者3;;
esac
for 循环
# 语法1
for i in 值1 值2 值3 # 同 for ((初始值循环控制条件变量变化))dopassdone
eg1: done # for循环完毕后最后执行一次
for i in 1 2 3 4 5 6doecho $idone
eg2:
s0
for (( i1;i100;ii1 ))dos$(( $s$i ))done echo $s
while 循环
while [condition]do passdoneeg:
#从1加到100 i1
s0while [ $i -le 100 ]
#如果变量i的值小于等于100则执行循环 dos$(( $s$i ))i$(( $i1 ))doneecho The sum is: $s
until 循环
# 循环和while循环相反until循环时只要条件判断式不成立则进行循环
#从1加到100i1
s0until [ $i -gt 100 ]
#循环直到变量i的值大于100循环就停止了 dos$(( $s$i ))i$(( $i1 ))doneecho The sum is : $s