Shell脚本入门:从零构建你的第一个bash脚本
2026/7/11 6:18:58 网站建设 项目流程

一、使用多个命令:串联与管道

Shell脚本的核心能力之一是将多个命令组合执行。

1. 分号串联(顺序执行)

将多个命令放在同一行,用分号;隔开,Shell会按顺序依次执行:

bash
date ; who

效果:先显示当前日期时间,再显示当前登录用户列表。

2. 管道连接(传递结果)

使用管道符|可以将前一个命令的输出作为后一个命令的输入,最终只显示最后一个命令的输出:

bash
date | who

效果:date的输出被传给who,但who不接收标准输入,所以实际上等同于只执行who。更典型的管道示例:

bash
ls -l | grep ".sh"

二、创建与执行Shell脚本文件

1. 创建脚本文件

使用vim创建.sh后缀的文件,第一行必须指定解释器:

bash
#!/bin/bash
# 这是一个注释
echo "Hello, Shell!"

#! 告诉系统用哪个Shell程序来运行脚本
普通#用于注释

2. 执行脚本的两种方法

方法一:直接调用bash命令

bash
bash test.sh

方法二:赋予可执行权限后,用路径执行

bash
chmod +x test.sh
./test.sh # 相对路径
# 或 /home/zhang/zz/sh_script/test.sh 绝对路径

如果不加执行权限,会报错 Permission denied

三、echo命令与消息显示

echo用于向控制台输出文本消息,帮助用户了解脚本运行状态。

基础用法

bash
echo "正在执行脚本..."

-n 参数(不换行)

将文本和后续命令输出显示在同一行:

bash
#!/bin/bash
echo -n "当前用户是:"
who

输出:当前用户是:zhang pts/0 2026-07-10 10:30

四、变量使用

1. 引用环境变量

在变量名前加$即可引用:

bash
#!/bin/bash
echo "当前用户家目录:$HOME"
echo "当前路径:$PWD"

如果只想显示$符号本身,需要加反斜杠转义:

bash
echo "\$HOME 是环境变量"

2. 自定义变量

由字母、数字、下划线组成,长度≤20,区分大小写
赋值时=两边不能有空格

bash
#!/bin/bash
name="zhang"
age=20
echo "姓名:$name,年龄:$age"

脚本退出后,变量在命令行中不可见(局部变量)

3. 命令替换——将命令输出赋给变量

两种语法:

bash
# 反引号方式(旧)
current_date=`date +%y%m%d`

# $()方式(推荐,更清晰)
current_date=$(date +%y%m%d)

实战:生成唯一文件名

bash
#!/bin/bash
prefix="backup"
date_suffix=$(date +%y%m%d)
filename="${prefix}_${date_suffix}.log"
echo "生成的文件名:$filename"

五、wc命令——统计文件行数

wc(word count)默认输出三个值:行数、词数、字节数。

常用参数

参数含义
-l只显示行数
-w只显示词数
-c只显示字节数

示例

bash
# 查看单个脚本的行数
wc -l test.sh

# 查看所有.sh文件的总行数
wc -l *.sh

六、数学运算

Shell默认只支持整数运算,有四种方式。

1. expr命令

```bash
expr 100 + 50
expr 100 \* 2 # 乘号需要转义
```

注意:运算符与数字之间必须有空格

2. $[ ] 或 $(( )) (推荐)

bash
echo $[100 * (50 - 45)] # 输出 500
echo $((100 / 52)) # 输出 1(整数除法)

不需要转义符
空格可有可无
支持变量

bash
a=10
b=3
echo $[a * b] # 输出 30

3. bc计算器(支持浮点数)

bc是内建计算器,支持浮点运算。

命令行交互:

bash
bc
scale=4
10/3
quit

在脚本中使用bc:

bash
#!/bin/bash
result=$(echo "scale=4; 100 / 52" | bc)
echo "结果:$result"

注意:options和expression之间用分号;隔开,先写scale再写表达式

七、退出状态码

每个命令执行完毕后都会返回一个0~255的整数值,0表示成功,非0表示失败。

查看退出状态码

```bash
ls /home
echo $? # 显示上一条命令的退出码
```

在脚本中自定义退出码

```bash
#!/bin/bash
echo "执行完毕"
exit 5 # 手动指定退出码为5
```

执行后运行echo $?会显示5。

---

八、综合实战脚本

将以上知识点整合到一个脚本中:

```bash
#!/bin/bash
# 综合示例脚本

echo -n "开始执行时间:"
date

# 使用命令替换生成文件名
filename="report_$(date +%y%m%d).txt"
echo "本次报告将保存为:$filename"

# 自定义变量
user_name="zhang"
echo "操作者:$user_name"

# 数学运算(整数)
a=100
b=45
result=$[a * (50 - b)]
echo "100*(50-45) = $result"

# 浮点数运算(使用bc)
float_result=$(echo "scale=2; 100 / 52" | bc)
echo "100/52 = $float_result"

# 统计脚本自身行数
line_count=$(wc -l < $0)
echo "本脚本共有 $line_count 行"

echo "脚本执行完毕,正常退出"
exit 0
```

执行结果截图示意(请根据实际运行截图替换):

```
开始执行时间:2026年 07月 10日 星期五 10:30:00 CST
本次报告将保存为:report_260710.txt
操作者:zhang
100*(50-45) = 500
100/52 = 1.92
本脚本共有 18 行
脚本执行完毕,正常退出
```

九、知识框架总结

类别命令/语法用途关键点
多命令顺序执行命令间无关
管道\|传递输出只显最终结果
脚本创建#!/bin/bash指定解释器

必须第一行

执行脚本bash/chmod +x运行脚本路径或命令
输出消息echo显示文本-n不换行
引用变量$VAR取变量值环境/自定义
命令替换$(...)命令输出附变量推荐写法
行数统计wc -l统计行数支持通配符
整数运算$[...]/$((...))数学计算不用转义
浮点运算bc浮点数计算需scale
退出状态$?/exit检查/设置退出码0=成功

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询