shell速查表

转自:https://www.jianshu.com/p/a98a334bfb25

1. 变量

  1. #!/bin/bash
  2. msg="hello world"
  3. echo $msg

变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

2. 传参

  1. #!/bin/bash
  2. echo "执行的文件名:$0";
  3. echo "第一个参数为:$1";
  4. echo "第二个参数为:$2";
  5. echo "第三个参数为:$3";

脚本内获取参数的格式为:
$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
另外,还有几个特殊字符用来处理参数:

参数 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
"$*"用「"」括起来的情况、以"2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ $*相同,但是使用时加引号,并在引号中返回每个参数。
如"1" "n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

3. 数组

  1. #!/bin/bash
  2. my_array=(A B "C" D)
  3. echo "第一个元素为: ${my_array[0]}"
  4. echo "第二个元素为: ${my_array[1]}"
  5. echo "第三个元素为: ${my_array[2]}"
  6. echo "第四个元素为: ${my_array[3]}"
  7. echo "数组的元素为: ${my_array[*]}"
  8. echo "数组的元素为: ${my_array[@]}"
  9. echo "数组元素个数为: ${#my_array[*]}"
  10. echo "数组元素个数为: ${#my_array[@]}"

执行结果如下:

  1. 第一个元素为: A
  2. 第二个元素为: B
  3. 第三个元素为: C
  4. 第四个元素为: D
  5. 数组的元素为: A B C D
  6. 数组的元素为: A B C D
  7. 数组元素个数为: 4
  8. 数组元素个数为: 4

4. 基本运算符

原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

① 算数运算符

  1. #!/bin/bash
  2. echo "2加2等于"`expr 2 + 2`
  3. echo "2减2等于"`expr 2 - 2`
  4. echo "2乘2等于"`expr 2 \* 2`
  5. echo "2除2等于"`expr 2 / 2`
  6. echo "2除2取余"`expr 2 % 2`

② 关系运算符

  1. #!/bin/bash
  2. a=10
  3. b=20
  4. if [ $a -eq $b ] # 检测两个数是否相等,相等返回 true。
  5. if [ $a -ne $b ] # 检测两个数是否不相等,不相等返回 true。
  6. if [ $a -gt $b ] # 检测左边的数是否大于右边的,如果是,则返回 true。
  7. if [ $a -lt $b ] # 检测左边的数是否小于右边的,如果是,则返回 true。
  8. if [ $a -ge $b ] # 检测左边的数是否大于等于右边的,如果是,则返回 true。
  9. if [ $a -le $b ] # 检测左边的数是否小于等于右边的,如果是,则返回 true。

③ 布尔运算符

  1. #!/bin/bash
  2. if [ ! false ] # 非运算,返回 true
  3. if [ true -o false ] # 或运算,返回 true
  4. if [ true -a false ] # 与运算,返回 false

④ 逻辑运算符

  1. #!/bin/bash
  2. a=10
  3. b=20
  4. if [[ $a -lt $b && $a -gt $b ]] # 逻辑的 AND, 返回 false
  5. if [ $a -lt $b ] && [ $a -gt $b ] # 逻辑的 AND, 返回 false
  6. if [[ $a -lt $b || $a -gt $b ]] # 逻辑的 OR, 返回 true
  7. if [ $a -lt $b ] || [ $a -gt $b ] # 逻辑的 OR, 返回 true

⑤ 字符串运算符

  1. #!/bin/bash
  2. a="abc"
  3. b="efg"
  4. if [ $a = $b ] # 检测两个字符串是否相等,相等返回 true。
  5. if [ $a != $b ] # 检测两个字符串是否相等,不相等返回 true。
  6. if [ -z $a ] # 检测字符串长度是否为0,为0返回 true。
  7. if [ -n "$a" ] # 检测字符串长度是否为0,不为0返回 true。
  8. if [ $a ] # 检测字符串是否为空,不为空返回 true。

⑥ 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

操作符 说明
-b file 检测文件是否是块设备文件,如果是,则返回 true。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。
-d file 检测文件是否是目录,如果是,则返回 true。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file 检测文件是否是有名管道,如果是,则返回 true。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。
-r file 检测文件是否可读,如果是,则返回 true。
-w file 检测文件是否可写,如果是,则返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。

5. echo

① 命令格式

  1. #!/bin/bash
  2. echo "It is a test"
  3. echo It is a test
  4. echo "\"It is a test\"" # 转义
  5. name=Chris
  6. echo "$name is handsome"
  7. echo -e "OK! \n" # 显示换行 -e 开启转义
  8. echo "It is a test" > myfile # 显示结果定向至文件
  9. echo '$name\"' # 原样输入字符串,不进行转义或取变量(使用单引号)
  10. echo `date` # 显示命令执行结构

② 颜色显示

  1. echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
  2. echo -e \033[30m 黑色字 \033[0m
  3. echo -e \033[31m 红色字 \033[0m
  4. echo -e \033[32m 绿色字 \033[0m
  5. echo -e \033[33m 黄色字 \033[0m
  6. echo -e \033[34m 蓝色字 \033[0m
  7. echo -e \033[35m 紫色字 \033[0m
  8. echo -e \033[36m 天蓝字 \033[0m
  9. echo -e \033[37m 白色字 \033[0m
  10. echo -e \033[40;37m 黑底白字 \033[0m
  11. echo -e \033[41;37m 红底白字 \033[0m
  12. echo -e \033[42;37m 绿底白字 \033[0m
  13. echo -e \033[43;37m 黄底白字 \033[0m
  14. echo -e \033[44;37m 蓝底白字 \033[0m
  15. echo -e \033[45;37m 紫底白字 \033[0m
  16. echo -e \033[46;37m 天蓝底白字 \033[0m
  17. echo -e \033[47;30m 白底黑字 \033[0m
  18. \33[0m 关闭所有属性
  19. \33[1m 设置高亮度
  20. \33[4m 下划线
  21. \33[5m 闪烁
  22. \33[7m 反显
  23. \33[8m 消隐
  24. \33[30m \33[37m 设置前景色
  25. \33[40m \33[47m 设置背景色
  26. \33[nA 光标上移n
  27. \33[nB 光标下移n
  28. \33[nC 光标右移n
  29. \33[nD 光标左移n
  30. \33[y;xH设置光标位置
  31. \33[2J 清屏
  32. \33[K 清除从光标到行尾的内容
  33. \33[s 保存光标位置
  34. \33[u 恢复光标位置
  35. \33[?25l 隐藏光标
  36. \33[?25h 显示光标

6. sprintf

  1. #!/bin/bash
  2. printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
  3. printf "%-10s %-8s %-4.2f\n" 郭靖 66.1234
  4. printf "%-10s %-8s %-4.2f\n" 杨过 48.6543
  5. printf "%-10s %-8s %-4.2f\n" 郭芙 47.9876

结果:

  1. 姓名 性别 体重kg
  2. 郭靖 66.12
  3. 杨过 48.65
  4. 郭芙 47.99

%s %c %d %f 都是格式替代符
d: Decimal 十进制整数 -- 对应位置参数必须是十进制整数,否则报错!
s: String 字符串 -- 对应位置参数必须是字符串或者字符型,否则报错!
c: Char 字符 -- 对应位置参数必须是字符串或者字符型,否则报错!
f: Float 浮点 -- 对应位置参数必须是数字型,否则报错!
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。

7. test

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

  1. #!/bin/bash
  2. num1=100
  3. num2=100
  4. if test $[num1] -eq $[num2]

8. 流程控制

① if-else

  1. #!/bin/bash
  2. a=10
  3. b=20
  4. if [ $a == $b ]
  5. then
  6. echo "a 等于 b"
  7. elif [ $a -gt $b ]
  8. then
  9. echo "a 大于 b"
  10. elif [ $a -lt $b ]
  11. then
  12. echo "a 小于 b"
  13. else
  14. echo "没有符合的条件"
  15. fi

② for

  1. #!/bin/bash
  2. for loop in 1 2 3 4 5
  3. do
  4. echo "The value is: $loop"
  5. done

③ while

  1. #!/bin/bash
  2. int=1
  3. while(( $int<=5 ))
  4. do
  5. echo $int
  6. let "int++"
  7. done

④ case

  1. #!/bin/bash
  2. echo '输入 1 到 4 之间的数字:'
  3. echo '你输入的数字为:'
  4. read aNum
  5. case $aNum in
  6. 1) echo '你选择了 1'
  7. ;;
  8. 2) echo '你选择了 2'
  9. ;;
  10. 3) echo '你选择了 3'
  11. ;;
  12. 4) echo '你选择了 4'
  13. ;;
  14. *) echo '你没有输入 1 到 4 之间的数字'
  15. ;;
  16. esac

⑤ break

break命令允许跳出所有循环(终止执行后面的所有循环)。

  1. #!/bin/bash
  2. while :
  3. do
  4. echo -n "输入 1 到 5 之间的数字:"
  5. read aNum
  6. case $aNum in
  7. 1|2|3|4|5) echo "你输入的数字为 $aNum!"
  8. ;;
  9. *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
  10. break
  11. ;;
  12. esac
  13. done

⑥ continue

跳出当前循环。

  1. #!/bin/bash
  2. while :
  3. do
  4. echo -n "输入 1 到 5 之间的数字: "
  5. read aNum
  6. case $aNum in
  7. 1|2|3|4|5) echo "你输入的数字为 $aNum!"
  8. ;;
  9. *) echo "你输入的数字不是 1 到 5 之间的!"
  10. continue
  11. echo "游戏结束"
  12. ;;
  13. esac
  14. done

⑦ until

  1. #!/bin/bash
  2. a=0
  3. until [ ! $a -lt 10 ]
  4. do
  5. echo $a
  6. a=`expr $a + 1`
  7. done

9. 函数

  1. #!/bin/bash
  2. funWithParam(){
  3. echo "第一个参数为 $1 !"
  4. echo "第二个参数为 $2 !"
  5. echo "第十个参数为 $10 !"
  6. echo "第十个参数为 ${10} !"
  7. echo "第十一个参数为 ${11} !"
  8. echo "参数总数有 $# 个!"
  9. echo "作为一个字符串输出所有参数 $* !"
  10. }
  11. funWithParam 1 2 3 4 5 6 7 8 9 34 73

结果:

  1. 第一个参数为 1 !
  2. 第二个参数为 2 !
  3. 第十个参数为 10 !
  4. 第十个参数为 34 !
  5. 第十一个参数为 73 !
  6. 参数总数有 11 个!
  7. 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

10. 输入输出

  1. #!/bin/bash
  2. who > today.log # 执行结果覆盖到文件 today.log
  3. echo "菜鸟教程:www.runoob.com" >> today.log # 执行结果追加到文件 today.log
  4. wc -l < today.log # 统计 today.log 行数
  5. wc -l << EOF
  6. 李白
  7. 苏轼
  8. 王勃
  9. EOF

11. 文件包含

test1.sh

  1. #!/bin/bash
  2. name="Chris"

test2.sh

  1. #!/bin/bash
  2. #使用 . 号来引用test1.sh 文件
  3. . ./test1.sh
  4. # 或者使用以下包含文件代码
  5. # source ./test1.sh
  6. echo $name

注:被包含的文件 test1.sh 不需要可执行权限。

reference:

[1] http://www.runoob.com/linux/linux-shell.html

【转】shell速查表的更多相关文章

  1. Git 命令速查表

    Git 命令速查表 1.常用的Git命令 命令 简要说明 git add 添加至暂存区 git add-interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 ...

  2. Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  3. Tools - 速查表与备忘单(Cheat Sheet)

    Cheat Sheets Rico's cheatsheets Cheat-Sheets.org Python Python Cheat sheet Python Programming Cheat ...

  4. 【转】Vim速查表-帮你提高N倍效率

    Vim速查表-帮你提高N倍效率 转自:https://www.jianshu.com/p/6aa2e0e39f99 去年上半年开始全面使用linux进行开发和娱乐了,现在已经回不去windows了. ...

  5. GNU Emacs命令速查表

    GNU Emacs命令速查表 第一章  Emacs的基本概念 表1-1:Emacs编辑器的主模式 模式 功能 基本模式(fundamental mode) 默认模式,无特殊行为 文本模式(text m ...

  6. bash基本命令速查表

    来源:https://github.com/skywind3000/awesome-cheatsheets/blob/master/languages/bash.sh ################ ...

  7. Git命令速查表【转】

    本文转载自:http://www.cnblogs.com/kenshinobiy/p/4543976.html 一. Git 常用命令速查 git branch 查看本地所有分支git status ...

  8. Git 常用命令速查表(图文+表格)【转】

    转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...

  9. Bash中文速查表

    最好用的中文速查表(Cheatsheet) 来源:https://github.com/skywind3000/awesome-cheatsheets 感谢网友们的贡献! ############## ...

随机推荐

  1. 流畅的python--python数据模型

    python最好的品质之一就是一致性.初步接触python可能会len(collection)而不是collection.len()觉得不适应,这是通常所说的“python风格”(Pythonic)的 ...

  2. ADB interface驱动

    原文地址:https://blog.csdn.net/weixin_42108952/article/details/80153402

  3. nginx配置打印请求响应内容

    #放在http{}里面 log_format kyh ' [$time_local] "$request" $status \n' 'req_header:"$req_h ...

  4. jmeter源码导入eclipse步骤

    1.新建标准java项目2.右击项目选import filesystem 将apache-jmeter-4.0整个目录勾选allow output folders for source folders ...

  5. flask 安装及基础学习(url_for反转,静态文件引入)

    pip3 install flask pycharm 创建项目 默认的代码解释说明(及开启debug模式) #encoding:utf-8 from flask import Flask #从flas ...

  6. Linux记录-使用python临时搭建web服务器

    python2: python -m SimpleHTTPServer 8888 python3: python -m http.server 8888 wget   ip:8888/文件

  7. ubuntu 14.04中安装 ruby on rails 环境

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...

  8. 3.1HashMap源码分析

    在前篇博文中(HashMap原理及实现学习总结)详细总结了HashMap的原理及实现过程,这一篇是对HashMap的源码分析. package dataStructure.hash; import j ...

  9. 信号量Semaphore

    信号量说简单点就是为了线程同步,或者说是为了限制线程能运行的数量. 那它又是怎么限制线程的数量的哩?是因为它内部有个计数器,比如你想限制最多5个线程运行,那么这个计数器的值就会被设置成5,如果一个线程 ...

  10. GCC编译器原理(三)------编译原理三:编译过程(2-2)---编译之语法分析

    2.2 语法分析 语法分析器(Grammar Parser)将对由扫描器产生的记号进行语法分析,从而产生语法树(Syntax Tree).整个分析过程采用了上下文无关语法(Context-free G ...