博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell基础知识
阅读量:5218 次
发布时间:2019-06-14

本文共 2150 字,大约阅读时间需要 7 分钟。

Shell 学习基础

1、组合命令的符号

  1. 管道,将前面一个命令的结果作为后面一个命令的输入
  2. 分号,顺序执行用分号分割的命令
  3. 重定向,重定向包括三种:输入重定向、输出重定向、错误重定向,以7个不同的符号实现

    < :输入重定向

    > :输出重定向
    >> :输出重定向,但以追加的方式写入
    2> :错误重定向
    2>> :错误重定向,但以追加的方式写入
    &> :重定向输出和错误
    &>> :重定向输出和错误,但以追加的方式写入

2、变量

  1. 变量的基本操作:

    变量的定义格式:变量名=变量值

    变量的引用格式:$变量名、${变量名}

  2. 脚本内的特殊变量

    $n :表示第n个参数

    $* :表示所有参数
    $# :标识传入脚本的所有参数个数
    $? :标识上一条命令的返回值

  3. 三种定界符的区别:单引号、双引号、反撇号

    单引号:禁止引用和转义,即所有的符号都是所见即所得

    双引号:允许引用和转义,即双引号中的变量会替换为变量的值
    反撇号:以命令输出进行替换,即反撇号中的内容会替换为执行它的结果

  4. 执行变量内的命令

    当我们需要在脚本中执行多次同样的命令时,可以将该命令放入一个变量中,然后每次使用该变量执行命令即可。

    eval ${CMD}

3、算术运算

  1. 整数运算
    使用expr命令,计算表达式,格式:expr 数值1 操作符 数值2,对变量的引用需$
    使用$[]表达式,算式替换,格式:$[数值1 操作符 数值2],对变量的引用可以不加$
  2. 几个数值处理技巧
    变量的递更处理,格式:let 变量名++、let 变量名--
    使用随机数,格式:RANDOM 变量
    生成数字序列,格式:seq 首数 末数、seq 首数 增量 末数
  3. 小数运算
    shell本身没有提供小数运算,需要依靠管道来使用另外一个命令bc

4、字符串操作

  1. 字符串截取
    路径分割:dirname命令、basename命令
    使用expr命令:expr substr $var1 起始位置 截取长度,起始位置以1开始
    使用${}表达式:${var:起始位置:截取长度},起始位置以0开始
  2. 字符串替换
    使用${}表达式:${var/old/new}替换第一个old为new和${var//old/new}替换所有的old为new
  3. 使用随机字符串

5、条件测试

  1. 测试操作规范
    测试操作本质上也是一个命令,它的作用就是用来判断一个条件的,格式1:test 条件表达式,格式2:[ 条件表达式 ],注意条件表达式和[]之间的空格
  2. 文件状态的检测
    -e :文件或目录是否存在
    -d :是否为目录
    -f :是否为文件
    -r :是否可读
    -w :是否可写
    -x :是否可执行
  3. 整数值比较
    -eq :等于(equal)
    -ne :不等于(not equal)
    -gt :大于(greater than)
    -lt :小于(lesser than)
    -ge :大于等于(greater or equal)
    -le :小于等于(lesser or equal)
  4. 字符串匹配
    = :判断两个字符串是否相等
    != :判断两个字符串是否不相等

6、if 判断结构

1.单分支结构:

if 条件测试then    命令序列fi

2.双分支结构:

if 条件测试then    命令序列1else    命令序列2fi

3.多分枝结构:

if 条件测试1then    命令序列1elif 条件测试2then    命令序列2...else    命令序列nfi

7、for 循环

语法结构:

for 变量名 in 取值列表do    命令序列done

取值列表用空白符分割,示例:

for i in 1 2 3 4 5do    echo $idone

输出结果:

12345

8、case 分支

语法结构:

case 变量值 in模式1)    命令序列1    ;;模式2)    命令序列2    ;;...*)    默认命令序列esac

9、awk 工具

  1. 语法格式:awk '模式 {操作}' 文件1 文件2 ...
  2. 常用内置变量:
    NR :当前处理行的序号(行号)
    FS :字段分隔符,默认为空格或tab
    $0 :当前行的所有内容
    $n :当前行第n个字段

10、sed 工具

  1. 语法格式:
    sed '编辑指令' 文件1 文件2 ...
    sed -n '编辑指令' 文件1 文件2 ... 不输出指令不影响的数据
    sed -i '编辑指令' 文件1 文件2 ... 直接修改文件
  2. 编辑指令写法:
    [地址1[,地址2]]操作类型
    多条指令之间以分号隔开,是指编辑指令,例如:sed -n '3p;5p' test.dat
  3. 常用操作类型:
    p :输出文本行
    n :取下一行文本(跳过当前行)
    d :删除
    s :字符串替换
    a :追加新文本

10、参数

$n:取传给函数或者脚本的第n个参数(n从0开始),当大于9时,需要用大括号括起来,${10}

$0:脚本的名称
$@:所有参数
$:所有参数,当以""包括时,$是一个整体,$@是分开的
$#:参数个数
$$:当前shell的进程ID

转载于:https://www.cnblogs.com/lit10050528/p/4457249.html

你可能感兴趣的文章
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>