day3 shell脚本和编程 | 青训营笔记

86 阅读2分钟

shell

基本概念

shell:  一门编程语言,也是命令解释器,让用户通过界面访问操作系统内核。
bash:  shell的一种实现。

语法和命令

变量

  • 自定义变量
    作用域在当前shell,声明方式为 =变量名和=之间不能有空格
  • 环境变量
    作用域在当前shell和其子shell,声明方式为exportdeclare -x
  • 系统环境变量 作用域在所有shell

自定义变量

使用:$

   your_name="qinjx"  
   echo $your_name`

image (11).png
declare [+/-] 选项 变量

选项含义
-给变量设置类型属性
+取消变量的类型属性
-a声明变量为数组
-i声明变量为整型
-x声明变量为环境变量
-r声明变量为只读
-p显示变量的类型

管道

语法:cmd1 | cmd2
作用:将前一个命令的结果传给后面的命令。
要求:右侧的命令必须能接受标准输入,ls、mv等不能直接使用,可用xargs预处理

重定向

一般情况下,每个shell命令运行时都会打开三个文件:

  • 标准输入文件(stdin):文件描述符为0,终端输入。
  • 标准输出文件(stdout):文件描述符为1,终端输出。
  • 标准错误文件(stderr):文件描述符为2,写入错误信息。

输出重定向符号

  • >: 覆盖写入文件
  • >>: 追加写入文件
  • 2>: 错误输出写入文件
  • &>: 正确和错误输出统一写入文件

输入重定向符号

  • <
  • <<

test 命令

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

分支语句

if-else

if else 的 [...] 判断语句中大于使用 -gt,小于使用 -lt。
如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <。

b=20  
if (( $a == $b ))  
then  
   echo "a 等于 b"  
elif (( $a > $b ))  
then  
   echo "a 大于 b"  
elif (( $a < $b ))  
then  
   echo "a 小于 b"  
else  
   echo "没有符合的条件"  
fi

case语法

循环语句

  • while
  • until
  • for

函数

  • shell自上而下执行,函数使用前需定义
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数
  • return仅表示函数执行状态
  • 返回值在调用该函数后通过 $()、`` 来获得。

常用命令

image (12).png

原理分析

执行过程

  1. 字符解析
  2. shell展开
  3. 重定向
  4. 执行命令1. 花括号展开
  5. 收集状态并返回

shell展开

  1. 大括号展开
  2. 波浪号展开
  3. 参数展开
  4. 命令展开
  5. 数学计算 $(())包裹数学运算表达式,得到结果并替换
  6. 文件名展开 *?[...]外壳文件名模式匹配

大括号展开

a{d,c,b}e //ade ace abe
{1..5} // 1 2 3 4 5
{1..5..2} //1 3 5(可调整增量,字母不行)
{a..e} a b c d e