变量定义
- 变量定义等号前后不能加空格,例如:”A=123”
数组定义引用
1 | A=( test1 test2 test3 ) |
计算任意精度数
1 | a=$(echo "scale=n;$num1/$num2"|bc) //scale=n;` *n是多少就保留多少位小数* |
计算整数
1 | c=`expr $num1 + $num2` *使用乘号\* 的时候必须使用转义符号* |
bc 使用
ibase
指定输入的数字进制obase
指定输出的数字进制scale
设定小数位echo "obase=10;ibase=2;$num1+$num2" | bc
系统常用参数
$#
是传给脚本的参数个数$n
是第n个参数$0
是脚本本身的名字$1
是传递给该shell脚本的第一个参数$2
是传递给该shell脚本的第二个参数$@
是传给脚本的所有参数的列表(加引号时把每个参数作为一个字符串返回,不加引号与$*相同)$*
是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个$$
是脚本运行的当前进程ID号$?
是显示最后命令的退出状态,0表示没有错误,其他表示有错误
基本命令用法
- 输出重定向
>
妙用:”命令 >& 目标文件” “命令 &> 目标文件” - 输入重定向
<
妙用:”命令 < 目标文件” “命令 < 目标文件” bash + xx.sh
和 ./xx.sh 子shell执行方式.(空格)xx.sh
和source xx.sh
当前shell的执行方式login shell ==> su - username
nologin shell ==> su username
- 系统级shell配置 ==>
/etc/profile /etc/bashrc
- 用户级shell配置 ==> 登录时加载:
~/.bashrc ~/.bash_profile
退出时加载:~/.bash_logout ~/.bash_history
- 历史命令
!number !string !$(上一个命令的最后一个参数) !!(上一个命令) ^R(命令搜索)
- 取消别名:unalias或者在命令前加
\
- 快捷键:
^D(退出/logout) ^A(移到命令最前面) ^E(移到命令最后面) ^L() ^U(删除光标前面所有命令) ^K(删除光标后面的所有) ^S(锁住命令行) ^Q(解除锁定命令行) ^Y(撤销删除) ^T 交换光标处文字次序
- &(退出终端后消失) nohup(退出终端后仍然有)
- 管道
|
:一个命令的输出作为下一个命令的输入 - 输入一行内容到文件
echo 内容 > 文件
- 输入多行内容到文件
cat >文件 << EOF
tee
: 复制标准输入的内容到标准输出 参数a 表示追加- 在vim里保存没有权限的文件
:w !sudo tee %
(%在vim里是一个只读寄存器的名字,总保存着当前文件的路径)
- 命令排序
;
不具备逻辑判断cd;eject
&& ||
具备逻辑判断./configure && make && make install
- 显示命令返回值 echo $?
if条件判断参数
参数 | 功能 | 应用说明 |
---|---|---|
-f | 判断文件是否存在 | eg: if [ -f filename ] |
-d | 判断目录是否存在 | eg: if [ -d dir ] |
-eq | 等于 | 应用于:整形比较 |
-ne | 不等于 | 应用于:整形比较 |
-lt | 小于 | 应用于:整形比较 |
-gt | 大于 | 应用于:整形比较 |
-le | 小于或等于 | 应用于:整形比较 |
-ge | 大于或等于 | 应用于:整形比较 |
-a | 双方都成立(and) | 逻辑表达式 -a 逻辑表达式 |
-o | 单方成立 (or) | 逻辑表达式 -o 逻辑表达式 |
-z | 空字符串 | / |
if使用
1 | if (($num1+/-/\*//$num2));then |
for循环使用
1 | for i in 字符变量 |
tail命令的使用
命令 | 参数 | 数量 | 文件名 | 功能 |
---|---|---|---|---|
tail | / | / | filename | 打印filename的最后十行 |
tail | -f | / | filename | 跟踪显示filename的最后十行 |
tail | -c | n | filename | 显示filename的最后的n个字符 |
tail | -n | / | filename | 显示filename的第n行至末尾的内容 |
while循环使用
1 | while [[ ...(满足此条件执行循环) ]] |
until循环使用
1 | until [[ ...(满足此条件退出循环) ]] |
case 选择语句使用
1 | case $arg in |
select 选择语句使用
1 | PS3="文本描述" //在select语句前使用此命令则会在每次选择时显示文本描述内容 |
read 使用
- read 变量 从标准输入里读取内容赋值给变量
- read -p “文本” 变量名
sed 使用
- 注:在Mac下需要在-i后面加一个”.bak”,会生成一个”原文件.bak”的备份文件
sed 's/old/new/g' filename
将filename里的所有old预修改为new,并在终端显示,但不会实际修改文件sed -i 's/old/new/g' filename
将filename里的所有old改为newsed -i 's/^/& /g' filename
在文件每行的最前面加一个空格sed '文件中已经存在的字符/a 你想在前面已经存在的字符后面一行加的字符/'
sed '文件中已经存在的字符/i 你想在前面已经存在的字符前面一行加的字符/'
- 在Mac下使用a\ i\ 需要以下输入方式:
sed '/文本1/a\ <CR>
>文本2 filename
sed -i "" 's/ /\'$'\n''/g' filename
在Mac下将filename里的空格转换为换行符sed 'nd' filename
删除第n行,其余的打印到屏幕上sed 'n,$d' filename
删除第n行到最后一行,其余打印到屏幕上sed -i 'ns/old/new/' filename
n表示第n行
find
find [目录]... [表达式] [操作]
【表达式】:
表达式 | 后接参数 | 说明 |
---|---|---|
-name | 文件名 | 带有通配符时要加单’’或双引号”” |
-user | 用户名 | … |
-group | 组名 | … |
-mtime | [+-]n | 查找n天前修改过的文件 “+n表示超过n天,-n表示不超过n天” |
-atime | [+-]n | 访问… |
-ctime | [+-]n | 变更… |
-mmin | [+-]n | 分钟… |
-amin | [+-]n | 分钟… |
-cmin | [+-]n | 分钟… |
-type | [f/d/b/c] | f(普通文件)/d(目录)/b(块设备文件)/c(字符设备文件) |
-size | [+-]n[] | b(块==512字节)/c(字节)/k(1024字节)/w(字==2字节) |
-a | / | and;与操作,连接两个表达式,表示要同时满足两个表达式 |
-o | / | or; 与操作,连接两个表达式,表示只满足其中一个表达式 |
! | / | 非;取反操作 |
\( 表达式 \) | / | 括号中的优先 |
【操作】:
操作 | 说明 |
---|---|
显示找到的文件名 | |
-ls | 显示找到文件的详细信息 |
-exec command {} ; | 对找到的文件执行指定命令 |
-ok command {} ; | 对找到的文件执行指定命令,执行命令时提醒确认 |
【说明】:
- 未指定搜索条件时,显示目录下所有文件,包含隐藏文件。未指定目录时,默认为当前目录。未指定操作时,默认的操作是
-print
grep 查找关键字
- 注:搜索关键字时最好用单或者双引号包含起来,有多个参数时,-e放在最后
grep 关键字 filename/stdin
从filename或stdin里查找关键字grep -v 关键字
除了制定的关键字之外的词grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"
匹配类似IP地址的文本,192.168.10.10grep -c
列出关键字所在的行数grep -l
只显示匹配字符串的文件名grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]
OPTIONS:
参数 | 说明 |
---|---|
-e: | 使用正则搜索 |
-i: | 不区分大小写 |
-v: | 查找不包含指定内容的行 |
-w: | 按单词搜索 |
-c: | 统计匹配到的次数 |
-n: | 显示行号 |
-r: | 逐层遍历目录查找 |
-A: | 显示匹配行及后面多少行, 如: -A 3, 则表示显示匹配行及后3行 |
-B: | 显示匹配行及前面多少行, 如: -B 3, 则表示显示匹配行及前3行 |
-C: | 显示匹配行前后多少行, 如: -C 3, 则表示显示批量行前后3行 |
--color: | 匹配到的内容高亮显示 |
--include: | 指定匹配的文件类型 |
--exclude: | 过滤不需要匹配的文件类型 |
[/] | 指定匹配字符的范围。如模式’[Mm]ain’ 匹配 Main和main |
\< | 标注词首,如模式’<man’ 匹配 manic和man,但不匹配Batman |
\> | 标注词尾,如模式’man>‘ 匹配 Batman和man,但不匹配manic |
^ | 标注行首,如’^The’匹配行首的The,而不匹配其他位置的The |
$ | 标注行尾,如’$The’匹配行尾的The,而不匹配其他位置的The |
\| | 表示模式间的或关系。如’Saturday\|Sunday’ 匹配Saturday或Sunday |
awk 使用
awk -v I=$i '{if(I==$1)print $2}
-v:允许添加变量 ,如果I等于第一列,就打印第二列
tar备份
- 全部备份:
tar -g snapshot -cvzf xx.tar.gz xx(想要备份的文件)
- 增量备份:
tar -g snapshot -cvzf xxx.tar.gz xx(跟上面一样的目录文件)
这里的snapshot跟上面是同一个文件,但压缩包名字要求不一样
ip fliter
tail -1000 /var/log/secure | grep "Failed password" | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c | awk '$1>=4 {print $2}'
ssh秘钥链接
- ssh-keygen //之后连续三次默认确定
- ssh-copy-id -i /root/.ssh/id_rsa.pub +远程ip地址
- ssh-copy-id -i /root/.ssh/id_rsa.pub +本地ip地址
wc 命令使用
参数 | 说明 |
---|---|
-c | 只统计字节数,汉字加3,字母加1 |
-l | 只统计行数 |
-m | 只统计字符数,不论是字母还是汉字都只加1 |
-w | 只统计字数 |
- 注:不指定参数,默认为显示行数、字数和字符数
gcc编译基础
阶段 | 命令 | 说明 |
---|---|---|
1.预处理(preprocessing) | gcc -E | 旧版由gcc调用cpp完成,新版作为编译的一个阶段,由gcc完成 |
2.编译 (compilation) | gcc -S | gcc完成 |
3.汇编 (assembly) | gcc -c | gcc调用汇编器as完成 |
4.连接 (linking) | gcc | gcc调用连接器ld完成 |
gcc命令
参数 | 说明 |
---|---|
-Wall | 显示所有警告信息 |
-I[dirname] | 将dirname目录加入到头文件搜索列表中 |
-L[dirname] | 将dirname目录加入到库文件搜索列表中 |
-l[name] | 加载名为libname.a或者libname.so的函数库.例如-lm表示连接名为libm.so的数学 函数库 |
-static | 使用静态库。注意:在命令行中,静态加载的库必须位于调用该库的目标文件之后 |
- gcc代码优化(等级:0、1、2、s级),默认为0级,不进行优化
- -O 对代码基本优化(1级)
- -O2 对代码进行深度优化(2级)
- -Os 生成最小的可执行文件,适合嵌入式软件
- gcc调试
- -g 产生能够被 GDB调速器使用的调试信息。-g可以与-O和-O2连用,以便在与最终产品尽可能相近的情况下调试代码。
- -pg在程序里加入额外 的代码,执行时产生供性能分析工具gprof使用的剖析信息,以便了解程序的耗时情况 。
man 联机手册
- man 命令格式: man [option] command_name
- option:
- i[p] 指定在第i节里查找。1为系统命令,2为系统调用,3为C库函数。p表示POSIX手册页,即1p为POSIX手册页,3P为POSIX库函数。
- -k 显示所有名称中含有command_name的手册页及其说明
- -f 查询全部与名称相符的手册页