与其当一颗流星,燃尽璀璨却不留下一丝灰烬,不如默默一生,在身后留下一座拱门,一方苗圃,一堵缀满果实的墙。

在写 shell 脚本的过程中,某些语法总是遗忘,为了让自己经常性且有条理的复习,在此整理了相关 shell 笔记。



文章目录

  • 1. Shell 简介
  • 2. 一个简单 shell 脚本
  • 3. Shell 变量
  • 3.1 系统变量
  • 3.2 自定义变量
  • 3.3 变量的使用
  • 3.4 Shell 字符串
  • 单引号
  • 双引号
  • 3. 字符串操作
  • 3.1 获取字符串长度
  • 3.2 提取字符串
  • 4. Shell 数组
  • 5.1 定义数组
  • 5.2 读取数组



1. Shell 简介

Shell 采用 C 语言编写,是用户和 linux 内核沟通的桥梁;Shell 既是一种命令语言,也是一种程序设计语言(解释性语言)。简而言之,是用于接收应用程序/用户命令,然后调用操作系统内核。
而Shell 脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后执行。

2. 一个简单 shell 脚本

脚本名为 hello.sh

#!/bin/bash
echo "Hello World!"
mkdir -p demo1/demo2/hello.md
cd demo1/demo2
echo "hello" >hello.md 
# 向文档中写入内容
  1. #!
  2. # 表示脚本中的单行注释
    多行注释:
:<<EOF
...
EOF

或者

:<<!
...
!

运行脚本

  1. 首先给文件执行权限
chmod 700 hello.sh
或者
chmod +x hello.sh
  1. 运行脚本
./demo
运行脚本可以是绝对路径,也可以是相对路径,上述展示的是相对路径

3. Shell 变量

3.1 系统变量

  • $HOME :主目录路径
  • $PWD:当前路径
  • $SHELL:输出结果是 :/bin/zsh, 脚本环境
  • $USER:当前用户名

3.2 自定义变量

var="hello"

变量命名规范

  • 等号两边不能有空格
  • 变量名称可以由字母、数字、下划线组成,不能以数字开头,环境变量一般大写。
  • 变量默认类型是字符串类型,无法进行数值运算
➜  shelldemo C=1+2
➜  shelldemo echo $C
1+2
  • 变量升级为全局变量
export 变量名

注意:
将 demo目录下的文件循环输出

for file in `ls /demo`
或
for file in $(ls /demo)

3.3 变量的使用

# 定义变量
name="zeng"
echo $name
echo ${name}
推荐使用花括号,因为当有多个变量名进行拼接时,,可以帮助解释器识别变量的边界。

3.4 Shell 字符串

首先 Shell 变量默认类型是字符串类型,字符串可以使用单引号、双引号或者不加引号,但是当变量值有空格时,必须要加引号。

单引号

➜  ~ C=1+2
➜  ~ echo $C
1+2

➜  ~ a='$HOME'
➜  ~ echo $a
$HOME

注意

  • 单引号里不能包含单引号
  • 单引号里的内容会被原样输出,且单引号里的变量是无效的

双引号

➜  ~ b="$HOME"
➜  ~ echo $b
/Users/zengzhaoxia

➜  ~ c="hello\n world"
➜  ~ echo $c
hello
 world

注意

  • 双引号里可以含有变量
  • 双引号里可以有转义字符

3. 字符串操作

3.1 获取字符串长度

➜  ~ a='abcd'
➜  ~ echo ${#a}
4

3.2 提取字符串

字符串的第一个索引值为0

➜  ~ b="Hollo World"
➜  ~ echo ${b:6:3}.  #从第7个字符开始截取3个字符
Wor
➜  ~ echo ${b:6}
World

4. Shell 数组

5.1 定义数组

Shell 只支持一维数组,数组大小无限定,下标索引从0开始,数组元素用“空格”分隔开。

array=(value0 value1 value2 value3)

定义数组方法1

array=(value0 value1 value2 value3)

定义数组方法2

array=(value0
 value1
 value2
 value3
 )

定义数组方法3

可以不使用连续的下标
array[0]=value0
array[2]=value2

5.2 读取数组

1. 获取数组中单个元素
${array[下标]}

2. 获取数组中所有元素
${array[@]}

3. 获取数组长度
len=${#array[@]}
或者
len=${#array[*]}

4. 获取数组中单个元素的长度
len1=${#array[下标]}