与其当一颗流星,燃尽璀璨却不留下一丝灰烬,不如默默一生,在身后留下一座拱门,一方苗圃,一堵缀满果实的墙。
在写 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
# 向文档中写入内容
- #!
- # 表示脚本中的单行注释
多行注释:
:<<EOF
...
EOF
或者
:<<!
...
!
运行脚本
- 首先给文件执行权限
chmod 700 hello.sh
或者
chmod +x hello.sh
- 运行脚本
./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[下标]}