shell脚本基础

1.7k 词

概念

Shell 是一个命令行解释器,它为用户提供了一个向操作系统发送指令的接口。Shell 脚本(Shell Script)是一种为 Shell 编写的脚本程序,它包含了一系列的命令和语句,用于实现特定的功能。Shell 脚本通常用于自动化日常任务、批量处理文件、编写简单的应用程序等。
Shell脚本本质上是Shell命令的有序集合。


基本语法

1
2
3
4
5
6
7
#!/bin/bash

# 注释
# 开头指定bash解释脚本,不写则默认shell

# 屏幕打印字符串:
echo "hello world"

变量

自定义变量

1
2
3
4
5
6
7
8
# 定义变量
name="hello"
# 使用变量
echo $name
# 只读变量
readonly name
# 删除变量
unset name

环境变量

shell在开始运行时就已经定义了一些和系统工作环境有关的变量,我们在shell中可以直接使用$name 引用。
可以使用 export 前缀来自定义环境变量,或将已有变量修饰为环境变量。
另外,使用env命令可以查看当前系统所有的环境变量。环境变量使用unset也可以清除。
一般情况下环境变量是全大写字母

1
2
3
4
# 定义环境变量
export name="hello"
# 使用环境变量
echo $name

常见的环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
# 当前用户
USER
# 当前用户家目录
HOME
# 当前用户登录的终端
SHELL
# 当前用户登录的终端类型
TERM
# 当前用户登录的终端的编号
Tty
# 当前用户登录的终端的进程号
Pid
# 当前用户登录的终端的进程号

访问和编辑系统变量文件

一般在 ~/.bashrc或者/etc/profile文件中,可以编辑环境变量。
编辑完成后,使用 source ~/.bashrc 或者 source /etc/profile 命令使修改生效。或者重启终端/系统让其自动启用生效。

预设变量

在运行shell脚本时,我们可以通过命令行参数的形式向脚本传递参数,这些参数在脚本中被称为预设变量。预设变量是shell脚本中预先定义好的变量,用于存储命令行参数的值。这样在shell脚本中就可以调用用户在执行脚本时传入的参数。

$0:当前进程的名称

$$:当前进程的进程号

$1 $2 $3 …… $9:运行脚本时传递给其的参数。如果序号不止一位,必须使用花括号将序号连成整体${10}

$#:参数个数

$*:所有参数的内容(拼接字符串)

$@:所有参数组成的数组(变量数组)

$?:命令返回后的状态,0表示成功,非0表示失败

字符串

1
2
3
4
5
6
7
8
9
# 字符串拼接
name="hello"
echo "my name is ${name}"
# 字符串长度
name="hello"
echo ${#name}
# 字符串截取
name="hello"
echo ${name:1:2}

数组

1
2
3
4
5
6
# 定义数组
arr=(1 2 3)
# 使用数组
echo ${arr[0]}
# 数组长度
echo ${#arr[@]}

条件判断

1
2
3
4
5
6
7
8
# if
if [ $1 -eq 1 ]; then
echo "1"
elif [ $1 -eq 2 ]; then
echo "2"
else
echo "3"
fi

循环

1
2
3
4
# for
for i in {1..5}; do
echo $i
done

函数

1
2
3
4
5
6
7
8

# 定义函数
function func() {
echo "hello"
}
# 调用函数
func

读取文件

1
2
3
4
# 读取文件
while read line; do
echo $line
done < file.txt

执行脚本的三种方式

  1. chmod +x test.sh,后 ./test.sh
    增加可执行权限后执行
  2. bash test.sh
    直接指定bash解释运行脚本
  3. . test.sh
    .空格 + 脚本 使用当前shell执行脚本,这种执行方式不会开启子进程,脚本中的变量会直接在当前shell中生效。而且会忽略脚本中指定的shell解释器类型。