shell学习笔记

echo 打印
echo -e 开启转义模式(\)
${变量名称} 变量引用
“” 双引号内可引用变量
‘’ 单引号内不可引用变量
`` 可以将命令的返回值赋值给变量
$? 查看上条语句是否成功
((a+b)) 对变量进行运算操作
({1…10}) 等价于seq 1 10。表示1到10的数组
awk ‘BEGIN{print 2/3}’ 小数计算
${s:6:3} 从第六个下标开始显示,显示3个
${s#***} 进行去头操作
${s#s} 匹配出现的第一个元素,截取之后的字符串(掐头)
${s##s} 匹配出现的最后一个元素,截取之后的字符串(贪婪匹配)
${s%s} 去尾(标准的尾部)
${s%s
} 去尾(匹配尾部的第一个元素,截取之前的字符串)
${s%%s
} 去尾(贪婪去尾)
${s/a/b} 把匹配到的a字段替换成b字段
echo / / / 打印当前bash的pid
bash 新建一个子bash
(a=1) 语句结束即消亡
/> 把一个内容输入到一个文件(输入重定向覆盖)
/>> 输入重定向追加
< 把一个文件内容输出到外面(输出重定向)
() 在子shell中运行
{} 在当前shell中运行
bash 创建一个子shell,并切换
sleep 睡眠等待 /秒
sleep 10 & 后台执行等待十秒 &后台执行
ps 查看安全进程
ps -e 查看所有进程
ps -ef 显示全格式
jobs 查看用户后台状态
Ctrl + Z 暂停当前运行状态
fg + 进程号 调到前台
bg +进程号 开始运行
set 可以获得当前的所有变量
env 可以获得可以传递给子进程的变量
export aa=bbbb 把私有变量导出
chmod +x **.sh 赋予执行权限
awk -F ‘|’ ‘{print $0}’ 按照指定字符串域分割打印所有
awk -F ‘+|-’ ‘{print $1}’ 按照加号或者减号域分割打印第一个
&& 结果为真执行后面的语句
|| 结果为假执行后面的语句

[2 -eq 2] 相等
[2 -ne 2] 不等
[2 -gt 2] 大于
[2 -ge 2] 大于等于
[2 -lt 2] 小于
[2 -le 2] 小于等于
[-a] 逻辑 与&
[-o] 逻辑 或||

-e file 如果文件存在,则结果为真
-d file 如果文件是一个子目录,则结果为真
-f file 如果文件是一个普通文件,则结果为真
-r file 如果文件可读,则结果为真
-s file 如果文件的长度不为0,则结果为真
-w file 如果文件可写,则结果为真
-x file 如果文件可执行,则结果为真

cp -p 保持所属用户属组不变
rm -f 不会出现警告信息
ls … 返回上级目录
ls -al 显示所有隐藏文件
ls -alR 递归显示子目录
ls -alt 时间排序显示最近的在上面(加r就是反序)
ls - 返回上次执行的目录
pwd 返回当前目录
sed 's/A/B/ 把B替换成A(替换第一个)
sed 's/A/B/g 把B替换成A(替换所有)
sed -i 's/A/B/g 不加 i 的话只能输出内容源文件内容不变,加上i可以替换文件内容
sed -i.bak 替换的同时生成一个副本
which 查找文件
touch 创造文件
mkdir 创建文件夹(-p 创建二级或多级目录)
history 显示命令记录
^C 终止一切程序
read -p “zio:” a 人机交互,手动输入a 的值
bash 执行文件内容
cat 打印文件内容
source 执行配置文件
curl 接口信息返回
grep 文本信息查找
more / less 查看大一些的文件(b 上一页,空格 下一页,回车下一行)
more .bash_history 查看登录所使用的命令(更多)
wc -l/w/c 统计行数/单词/字符
head -10 显示前十行
tail -n 10 显示文件后十行
tail -f 动态更新文件最新内容
stat 文件最近一次被访问(Access)/修改(Modify)/文件属性最近被修改(Change)
top 动态显示系统的整体运行(内存,虚拟内存,CPU…)
ps -a/x/f 显示现行终端所有程序/所有终端程序/ASCII字符显示树状结构
cat /proc/cpuinfo 显示CPU型号
free -m 显示内存(还有虚拟内存,也叫交换分区)
df -h 查看硬盘信息
date 显示系统时间
netstat -nltp 进程名,端口,远程ID
nslookup 解析域名服务器地址
vmstat 1 显示服务器总体性能表现(每隔一秒)
ln -s m1 m2 创建一个软链接
tree 查看当前目录结果
df -h 查看当前磁盘状态

预定义变量
$PWD 返回目录
$USER 返回当前用户名
$HOME 返回用户家目录
$PATH 返回环境变量

a(1 2 3) 数组定义
${a[]} 数组引用
${#a[
]} #返回数组长度

if [ 1 -eq 1 ]; then · · ·; else · · ·; fi
[ 1 -eq 1 ]&& · · ·|| · · ·

for(( c1 ; c2 ; c3;)); do · · · done
for((i=0;i<10;i++)); do echo$i;done

for x in *;do —;done
while [ a -ne b ];do ;((a++));done
while read x;do echo $x;done < text 读取一个文件遍历

return 函数返回
exit 脚本退出
break 退出当前循环。默认为1
break 2 跳出两层循环
continue 跳过当前的循环,进入下一次循环,
continue 2 跳到上一层循环的下一次循环中

i a 插入模式
yy p 复制粘贴
dd 删除
x 删除单个字符
:wq 保存退出
:wq! 强制保存退出
:q! 强制不保存退出
:set nu 显示行号

grep -i 忽略大小写
grep -v 不显示匹配的行
grep -o 把每个匹配的内容用独立的行显示
grep -E 使用扩展正则表达式
grep -A/B/C 打印匹配数据的上下文
grep pattern -r dir/ 递归搜索
ps -ef | grep bash
echo “ABC” | grep -i abc
ps -ef | grep bash | grep -v grep
echo “1234 7654” | grep -o “[0-9]4”
echo “1234 7654” | grep -oE “[0-9]4|76”

awk ‘BEINT{}{}EBD{}’ 开始和结束
awk ‘/Running/’ 正则匹配
awk ‘/aa/,/bb/’ 区间选择
awk ‘$2~/xxx/’ 字段匹配
awk ‘NR==2’ 取第二行
awk ‘NR>1’ 去掉第一行
FS字段分隔符
OFS输出数据的字段分隔符
RS记录分隔符(一行拆分成多行)
ORS输出字段的行分隔符
NF字段数
NR记录数
$0代表原来的行
$1代表第一个字段
$N代表第N个字段
$NF代表最后一个字段

sed[addr]X[options]
-e 表达式
sed -n ‘2p’ 打印第二行
sed ‘s#hello#wprld#’ 修改
-i 直接修改源文件
-E 扩展表达式
–debug 调试
pattern
20 30,35 行数与行数范围
/pattern/ 正则匹配
//,// 正则匹配的区间
action
d 删除
p 打印
g 替换所有
替换时引用\1 \2匹配的字段

#数据分析
awk ‘{print $1}’ nginx.log | sort | uniq -c |sort -nr | gnuplot -e "set term dumb; plot ‘

#根据PID显示cpu内存和pid以及线程数
ps -o %cpu,%mem,pid,ppid,thcount 2387

#每隔一秒显示进程性能
top -p 2387 -d 1

#ps的cpu统计不准
ps -o %cpu,%mem,pid,ppid 10125

#top命令比较准确
top -p 5838 -d 1 -b -n 20 > /tmp/top.txt

#绘图分析
grep -A1 “%CPU” /tmp/top.txt | grep -v “CPU” | grep -v “–” | awk ‘{print $9,$10}’ | gnuplot -e ‘set term dumb;plot “ #对服务器简单加压
while true;curl www.baidu.com;done
#通用的加压
for i in {1…10};do echo $i; ((while true;do curl http://127.0.0.1:8080/seveniruby1 ;done) & ) ; sleep 10; done;

你可能感兴趣的:(个人学习笔记,shell)