shell命令基础
1、 shell大小写敏感
2、 echo $a 打印a的值
3、 赋值的=两边不能有空格
4、 ‘与”的区别,双引号可以输出对应变量的值。a=”hello”,echo ‘abc $a’,结果:abc $a;echo “abc $a”,结果:abc hello
5、 {}变量的引用
6、 pwd命令,返回当前目录。预定义变量$PWD、$USER、$HOME、$PATH
7、 ${a[*]}、${a[@]}获取数组所有元素
8、 ${#a[*]}、${#a[@]}获取数组长度
9、 反引号,执行命令并将结果返回。a=`pwd`,将pwd命令的返回值赋值给a。
10、 -e开启转义模式。echo –e “a\”bbb”
11、 (())整数扩展,将里面的变量作为整数处理,也可以做算术比较。((a+b))执行a+b运算
12、 `pwd`与$(pwd)获取对应命令返回值
13、 echo $?查看上一条命令的执行结果,返回0成功,其余值失败
14、 {s:6}获取从第6个字符开始之后的字符
15、 {s:6:4}获取从第6个字符开始之后4个字符
16、 “${s#*o}”去掉o之前的所有字符
17、 “${s##*o}”去掉o之前的所有字符,贪婪匹配
18、 “${s%m*}”去掉m之后的所有字符
19、 “${s%%m*}”去掉m之后的所有字符,贪婪匹配
20、 “${s/tester/testing}”将tester替换为testing
21、 “${s//tester/testing}”将tester替换为testing
22、 [ 1 –eq 2 ]1等于2,结果false
23、 -eq等于
24、 -le小于等于
25、 ge大于等于
26、 lt小于
27、 gt大于
28、 -a逻辑与
29、 -o逻辑或
30、 [ string1 = string2 ]如果string1等于string2,则返回true
31、 [ string1 != string2 ]如果string1不等于string2,则返回true
32、 [ -n string1 ]如果string1不等于空,则返回true
33、 [ -z string1 ]如果string1等于空,则返回true
34、 [ -e file ]file文件是否存在;-d子目录;-f普通文件;-r可读;-s长度不为0;-w可写;-x可执行
35、 $?查看上一个命令的返回结果。0表示true,非0表示错误
36、 [[]]是[]的扩展语法,在老的sh里面不支持。
37、 history查看命令历史
38、 Ctrl+r反向查找输入过的命令
39、 if [ 1 lt 2 ];then echo “true”;else echo “fasle”;fi
40、 for ((i=0;i<${#array[@]};i++)) do echo $i;done
41、 for x in ${array[@]};do echo $x;done
42、 while [ x –lt 6 ];echo $x;((x+=1));done
43、 while read x;echo $x;done < 1
44、 (a=1;echo $a;)在子shell中运行a=1,{ a=1;$a; }在当前shell中执行
45、 ps –s/-ef显示所有进程
46、 sleep 10&在后台运行
47、 jobs查看所有任务
48、 bg后台执行,fg当前执行
49、 set 可以获得当前的所有变量
50、 env可以获得可以传递给⼦进程的变量
51、 export aa=bbbb 把私有变量导出
52、 mkdir新建文件夹
53、 chmod +x file.sh使文件为可执行
54、 .bash_profile环境变量文件
55、 > file输出内容至文件,>>为追加
56、 ls ddd > 1 2>&1输出重定向到1文件,2>&1即使出现错误也输出到1管道
57、 cat输出文件内容
58、 <输入重定向,| 表示管道
59、 grep “ccc” file.txt匹配文件内容,grep –i “ccc” file.txt忽略大小写匹配,grep –o “ccc” file.txt只显示匹配到的内容
60、 cat file.txt | grep –o “cdcc”使用管道命令进行匹配
61、 awk切片,默认空格切片。awk –F ‘|’ ‘{print $1}’,以|作为切割,也可以指定多个分隔符,分隔符直接用|分开。
62、 echo '123|456|789' | awk 'BEGIN{RS="|"}{print $1}',RS行分隔符,表示以分隔符进行分行
63、 echo '123|456|789' | awk 'BEGIN{FS="|"}{print $1}',FS表示分隔符,等价于awk –F ‘|’ ‘{print $1}’
64、 echo '123|456|789' | awk 'BEGIN{RS="|";ORS="+"}{print $0}',ORS指定每行输出的连接符为+
65、 echo '123|456|789' | awk 'BEGIN{RS="|"}{print $0,NR,NF}',NR表示记录数,NF该行的字段数
66、 使用,进行分割,并对第二个数据进行汇总
echo "1,2,3
4,5,6
7,8,9" | awk -F ',' 'BEGIN{total=0}{total+=$2}END{print total}'
67、 http://www.baidu.com/s?wd=mp3 2>&1 | grep 条评价 |awk -F '条评价' '{print $1}' | awk -F '>' '{print $NF}' | awk 'BEGIN{total=0}{total+=$1}END{print total}',$NF输出切割的最后一个字段
68、 echo "123|456|789" | sed "s#|#_#"将|替换为_,g表示全部替换。支持正则
69、 sed -n '/2/,/3/p'输出2-3之间的所有数
70、 sed -i "s#12#XXX#" 2.sh修改文件内容
71、 ps –ef查看进程信息,-aux查看进程占用的CPU、内存
72、 netstat –tlnp查看本机开放了多少个端口,-t看多少人登陆当前服务
73、 netstat -net | awk '{print $6}' | sort | uniq –c 输出连接的state的种类
74、 curl https://testerhome.com/topics/17251 2>/dev/null | grep "fa fa-heart" | grep "Reply" | grep "data-id=\"129176\"" | awk -F "\"" '{print $4}'
75、 脚本中,#以后的语句,shell不会解析,多⾏注释可以考虑采⽤:<<
76、 定义函数function x(){ echo 33;echo 555;},调用时直接写x
77、 $0 表⽰执⾏的程序,是相对于执⾏⽬录的路径;$1 ,$2 ,$3 分别表⽰第⼏个参数。默认shell只⽀持9个参数,使⽤shift可以传递更多的参数。
78、 $@,$* 表⽰所有的参数,不含$0;$@ 可以在函数之间传递参数,并不改变参数的排列,需要使用” $@”;$* 会把参数打散。相对顺序不变
79、 ${#*}和${#@}表⽰位置参数的个数
80、 bash –x ss.sh开启子shell执行脚本。–x读取每⼀句,并执⾏,可以⽅便的看到执⾏的语句
81、 source xx.sh在当前进程中执行脚本,执行完后脚本的变量不会消亡