Shell编程| 青训营笔记

106 阅读2分钟

Shell 编程

基础

主要从三个方面介绍:

  • 概念
  • 发展
  • 构成

概念

终端和tty可以理解为一个东西,早期计算机一般是有一个物理终端,它作为一个硬件设备,人们对着终端敲键盘,终端显示输出。tty可以有多个,在linux中是输入/输出环境。

发展

1971,贝尔实验室为Unix开发出第一个shell,v6 shell。后来又有了 Bourne Shell, 即sh。

现在常用的 shell 有 bash, zsh, fish, dash等,它们都是从 sh 发展而来。

构成

Shell 既是一个解释器,解释来自终端的命令,也是一门编程语言。

image.png

语法和命令

变量

类型作用域声明方式规范
自定义变量当前shell=字符串,浮点,整型,日期
环境变量当前以及字shellexport
系统环境变量所有shell启动加载

image.png

自定义变量左右不能有空格,值默认是字符串,所以不能运算。

可以用declare [+/-] 选项 变量的方式声明为想要的类型。如declare -i x声明为整型

变量名含义常见操作
$0当前shell名称/脚本名称$1 $2等可以获取到传入参数
$#出入脚本的参数数量if [ $# -gt 1 ]
$*传入脚本的所有参数
$?上条命令执行的状态码if [ $? -eq 0 ]
PS1命令提示符
$HOME用户目录
$PATH路径

配置文件加载流程

image.png

运算符和引用

类型符号作用
算术+ - * / %&
逻辑和比较&& ! < > == !=
引号单引号,双引号,反引号依次是完全引用,部分引用和执行命令
圆括号(())、()依次是算术运算和执行命令
命令连接&& ;
后台运行&

判断命令

提供了三种:

  • test
  • []
  • [[]]

注意中括号前后要有空格,中括号中的变量最好用引号括起来

test[是命令,只能使用自己支持的标志位,如-f, -z, -e

[[更丰富,在整型中支持> < =,在字符串比较支持正则

分支

 if condition; then
     \ ....
 elif condition; then
     \ ...
 else
     \ ...
 fi

case形式

 case $变量 in:
     "第一个变量内容")
     程序段
     ;;
     "第二个变量内容")
     程序段
     ;;
     *)
     程序段
     ;;
 esac

循环

 while condition; do 程序段; done
 ​
 until condition; do 程序段; done
 ​
 for var in [words...]; do 程序段; done

函数

 # 第一种
 funcName() { echo "abc"; }
 ​
 # 第二种
 function funcName() { echo "abc"; }

函数参数的获取, $0代表函数名,$1 $2获取后续参数

函数结果的获取一般使用打印,如echo, printf。而return一般返回状态码,存储在$?

执行

image.png

可以直接用文件名运行,也可以bash运行,还可以source运行

执行过程

展开的方式有:

  • 大括号 {...}

    • a{b,c,d}e 展开为 abe, ace, ade
    • {1..5} => 1 2 3 4 5
  • 波浪号 ~

    • 当前主目录
  • 参数

  • 命令替换

  • 数学计算 $(()

  • 文件名 * ? [..]