老亚瑟比较喜欢用cheat sheet(备忘录)的方式学习一些编程里零散但又经常会用到的知识点。相比于冗长详尽的博客,这种方式既简单轻量,同时每次查看的时候可以通过大脑对知识进行自动补全,能不断提升对应知识点的记忆。但是缺点也很明显,就是讲述不够细致全面。所以,如果读者对相关cheat sheet的知识储备太少的话,建议先系统学习。
下面是我学习和使用Linux shell时的cheat sheet。

测试操作符

test = [ ]  这两个是shell 程序
[[ ]]       这个是shell 关键字

引号

" " 双引号中可以使用$对变量取值
' ' 单引号中所有字符均表示字面值,无法用$取值

字符串比较

[[ "$s1" != "$s2" ]] [ "$s1" != "$s2" ]
[[ "$s1" == "$s2" ]] [ "$s1" == "$s2" ]
[[ "$s1" = "$s2" ]] [ "$s1" = "$s2" ]
[[ "$s1" > "$s2" ]] [ "$s1" \> "$s2" ]
[[ "$s1" < "$s2" ]] [ "$s1" \< "$s2" ]

数字比较(对[ ] [[ ]] 均有效)

-eq -ne
-gt -ge
-lt -le

浮点数比较(对[ ] [[ ]] 均有效)

v=7.6
if [ $(echo "$v >= 8" | bc) -eq 1 ]; then
if [ `echo "$v >= 8" | bc` -eq 1 ]; then
if [ `echo "$v" | awk '{if($1>=8) print 1; else print 0;}'` -eq 1 ]; then
if [ `echo "$v" | awk '{print ($1>=8)?1:0}'` -eq 1 ]; then

字符串测试(对[ ] [[ ]] 均有效)

-z True for zero
-n True for non-zero

文件测试(对[ ] [[ ]] 均有效)

-e True for file exist
-f True for normal file exist
-d True for dir exist
-c True for char file exist
-b True for block file exist
-p True for pipe file exist
-S True for socket file exist
-L/-h True for symbol link exist
-r/w/x True for readable/writable/executable file exist

逻辑运算符

[[ cond-a && cond-b ]] [ cond-a -a cond-b ]
[[ cond-a || cond-b ]] [ cond-a -o cond-b ]
[[ ! cond ]] [ ! cond ]

正则匹配

[[ "$ss" =~ regex ]] && echo ${BASH_REMATCH[1]}

if 判断

if TEST-COMMANDS; thenCONSEQUENT-COMMANDS
elif TEST-COMMANDS; thenCONSEQUENT-COMMANDS
elseCONSEQUENT-COMMANDS
fi

for 循环

for i in “file1” “file2” “file3”
for i in /boot/*
for i in /etc/*.conf
for i in $(seq -w 10)
for i in {1..10}
for i in $(ls)
for i in $(< file)
for i in "$@"
for ((i=0; i<5; i++))
docommands
done

while/until 循环

while read -r line
docommands
done < "path/to/file"while getopts :xy: opt
docase "$opt" inx);;y)Y=$OPTARG;;:)echo "require args";;?)echo "invalid args";;esac
donewhile true
while :
until condition  至少执行一次,和while 条件相反
done 2> error.log  在所有循环体的done 后面可以做标准输出/错误的重定向,while/until循环体的done可后面以做标准输入重定向

select/case 循环

select VAR in LIST
docase EXPR inPATTERN1)CONSEQUENT-COMMANDS;;PATTERN2 | PATTERN3)CONSEQUENT-COMMANDS;;esac
done
# case 语句可以单独使用

循环控制

break      用于for/while/until/select
continue   用于for/while/until

特殊字符

$@ argv
$# argc
$* argv to string
$0 script name
$? Last cmd exit code
$$ process ID

变量

$PARAMETER = ${PARAMETER}
${!PARAMETER}  间接参数扩展
${!PREFIX*} = ${!PREFIX@}  变量名扩展

字符串操作

${PARAMETER#PATTERN}    从前向后找,删除最短匹配串
${PARAMETER##PATTERN}   从前向后找,删除最长匹配串
${PARAMETER%PATTERN}    从后向前找,删除最短匹配串
${PARAMETER%%PATTERN}   从后向前找,删除最长匹配串
${PARAMETER/PATTERN/STRING}  查找并替换一处匹配
${PARAMETER//PATTERN/STRING} 查找并替换所有匹配
${PARAMETER/PATTERN}         查找并删除一处匹配
${PARAMETER//PATTERN}        查找并删除所有匹配
${#PARAMETER}                计算字符串长度
${PARAMETER:OFFSET:LENGTH}   获取子串,LENGTH可忽略

数组

myarrary=(value1 value2 valueN)  数组初始化
${myarrary[3]}="new one"         插入数组元素
unset myarrary[3]                删除数组元素
${myarrary[@]} = ${myarrary[*]}  遍历数组元素
myarray=(${STRING})              将字符串按空格转换成数组

数学运算

var=$(( EXPR ))  用算术扩展进行整数计算
let EXPR         用let进行算术运算,运算式中不能有空格
expr EXPR        用expr进行算术运算,运算符两边必须用空格,并且只能计算整数

函数

定义1 function func_name { commands }
定义2 func_name() { commands }
函数入参 $1 .. $n
定义函数内部变量  local
函数返回码  return N
函数返回值,函数内最后一条命令的结果
调用 func_name arg1 arg2
调用,接收返回值 ret=$(func_name arg1 arg2)
调用,转入后台 func_name args &

加载外部脚本文件

. /path/to/bash/script args
source /path/to/bash/script args

标准输出、错误同时重定向

command &> filename
command >& filename
command > filename 2>&1
command 2>&1 > filename

管道过滤器

awk -F: '{print $1 $NF}' #显示列
cut -d: -f1,6            #显示列
cut -c 1                 #显示第一个字符
grep "string"            #显示包含string的行
grep "regex"             #显示匹配正则表达式的行
grep -i "string"         #显示包含string的行,忽略大小写
grep -v "string"         #显示不包含string的行
grep -E "str1|str2"      #显示包含str1或者str2的行
head -n 5                #显示前5行
paste -d: file1 file2    #将文件内容横向合并,分隔符为:
paste file1 - - -        #将文件内容显示为3列
sed 's/xxx/yyy/g'        #将xxx替换为yyy
sed '/xxx/d'             #将xxx删除
sed -e cmd1 -e cmd2      #执行多个sed 命令
sed -i cmd               #直接修改文件
sort -n                  #首列按字面数值排列
sort -u                  #排序后去重
strings                  #过滤出可打印字符串
tail -n 5                #显示文件最后5行
tee                      #不影响显示的情况下存储输出到文件
tr 'regex1' 'regex2'     #将regex1 转换成regex2
tr -d 'regex'            #删除regex匹配到的字符
uniq                     #删除重复的行
uniq -c                  #计算重复行数
wc -l                    #计算行数

grep 正则字符集

^        #锚定行的开始
$       #锚定行的结束
.       #匹配一个非换行符的字符
*       #匹配零个或多个先前字符
.*      #一起用代表任意字符
[]      #匹配一个指定范围内的字符。
[^]     #匹配一个不在指定范围内的字符
/(/)    #标记匹配字符
/<       #锚定单词的开始,
/>       #锚定单词的结束
/{m,n/} #重复字符m~n次,n可忽略
/w      #[A-Za-z0-9]
/W      #/w的反置形式
/b      #单词锁定符
[[:alnum:]]     #[A-Za-z0-9]
[[:alpha:]]     #[A-Za-z]
[[:digit:]]     #[0-9]
[[:lower:]]     #[a-z]
[[:upper:]]     #[A-Z]
[[:blank:]]     #空字符: 空格键符 和 制表符
[[:space:]]     #空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符

awk 语法

awk -F: 'PATTERN { ACTION }'
awk -F: 'BEGIN { ACTION } /pattern1/ { ACTION } /pattern2/ { ACTION } END { ACTION }'

推荐阅读

《Linux Shell 命令行及脚本编程实例详解》

原始博客连接: https://editor.csdn.net/md?articleId=127997233

shell cheat sheet (备忘录)相关推荐

  1. 容器编排技术 -- kubectl Cheat Sheet

    容器编排技术 -- kubectl Cheat Sheet 1 Kubectl 自动补全 2 Kubectl 上下文和配置 3 创建对象 4 显示和查找资源 5 更新资源 6 修补资源 7 编辑资源 ...

  2. Cheat Sheet的意思

    刚才查了下:Cheat  Sheet的意思是备忘录. cheat是作弊的意思.这个词组原来的意思应该是考试作弊用的小抄吧.

  3. 139.00.007 Git学习-Cheat Sheet

    @(139 - Environment Settings | 环境配置) Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了. 友情附赠国外网 ...

  4. mysql 递归_「MySQL」 - SQL Cheat Sheet - 未完成

    近几个月的心情真是安排的妥妥的,呈现W状.多的不说了,这里对SQL的测试进行简单梳理,制作一份SQL Cheat Sheet. 0x01.数据库基本架构 Clinet层 Server层 连接器 网络连 ...

  5. ubuntu cheat sheet 目录结构

     Ubuntu Cheat Sheet Ubuntu系统目录结构 以下为Ubuntu目录的主要目录结构,您稍微了解它们都包含了哪些文件就可以了,不需要记忆. / 根目录 │ ├boot/ 启动文件.所 ...

  6. Emmet Cheat Sheet(Sublime编辑)

    快捷创建html标签 官网的Emmet Cheat Sheet :http://docs.emmet.io/cheat-sheet/ https://files.cnblogs.com/files/t ...

  7. Nmap Cheat Sheet Part 1

    译者:未知 原文:Nmap Cheat Sheet: From Discovery to Exploits – Part 1: Introduction to Nmap 在侦查期间,扫描一直是信息收集 ...

  8. XSS Cheat Sheet

    XSS Cheat Sheet XSS 101 <h1>Hello,<script>alert(1)</script>!</h1> 1. With &l ...

  9. Tmux Cheat Sheet

    Tmux Cheat Sheet 文章目录 Tmux Cheat Sheet 1. Sessions 2. Windows(个人不常用) 3. Panes 4. Tips 5. 配置文件:`.tmux ...

最新文章

  1. Keras创建者深度思考:不要将AI作为操纵用户的工具
  2. python3 数据库操作 orm sqlalchemy 简介
  3. spark 历史版本下载地址
  4. LeetCode 624. 数组列表中的最大距离
  5. mysql导出数据不锁表_mysqldump锁表出错及解决方法
  6. Sqoop Java API 导入应用案例
  7. renren-fast:使用人人开源renren-fast报错Error:(11, 39) java: 程序包io.renren.datasource.annotation不存在
  8. centos 下安装nginx
  9. 黑苹果电池电量补丁_【黑苹果】用一次实战记录电池热补丁的编写方法
  10. qqxml图片代码_QQxml卡片代码合集超大图、清明上河图、官方认证推荐等
  11. 微信怎样知道经常聊天的人
  12. 天线方向图的基本概念
  13. 泰克示波器3系MDO再次升级,使EMI测试不再求人
  14. 计算机专业c语言挂科怎么办,大学最容易挂科的“学科排行榜”出炉,补考难度很高,你挂了吗?...
  15. 微信群疯传!助力抢票不靠谱!还有风险…
  16. java start with_Java中startWith方法的使用!
  17. Leetcode(13)罗马数字转整数
  18. ZCMU-1860-zbj的电梯间
  19. k8s和harbor的集成_Harbor与K8s的集成实践
  20. (附源码)计算机毕业设计ssm本科生专业分流管理系统

热门文章

  1. 关于CKCsec安全研究院
  2. 拼多多怎么通过流量提高排名|成都盛天海
  3. Java字符串和数组相互转换
  4. win10 安装虚拟机
  5. 恒流源电路的几种实现方式(已通过Proteus仿真验证)
  6. Python之中Image的使用[putpixel]
  7. JavaScript的精华与糟粕
  8. 【84期分享】4款中国风PPT模板免费下载
  9. oracle 创建 dplink,Oracle创建dblink
  10. 入门篇-01什么是微服务?