从实列中学习linux shell4: shell 脚本中 $0 $1 $2 $3 >> 以及 awk 都是干啥的?
在 Linux Shell 脚本中,这些符号和工具的功能如下:
一、位置参数 $0 $1 $2 $3
符号 | 功能说明 | 示例 |
---|---|---|
$0 | 脚本自身的文件名 | 若执行 ./test.sh ,则 $0 值为 ./test.sh |
$1 | 第一个参数 | 执行 ./test.sh apple 时,$1 值为 "apple" |
$2 | 第二个参数 | 执行 ./test.sh apple banana 时,$2 值为 "banana" |
$3 | 第三个参数 | 以此类推 |
示例脚本:
#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "第三个参数: $3"
运行 ./demo.sh hello world 123
输出:
脚本名称: ./demo.sh
第一个参数: hello
第二个参数: world
第三个参数: 123
二、>>
符号
符号 | 功能说明 | 示例 |
---|---|---|
>> | 追加输出到文件(不会覆盖原有内容) | echo "new line" >> file.txt |
> | 覆盖输出到文件(会清空原内容) | echo "new content" > file.txt |
示例:
# 首次写入
echo "Line 1" > log.txt # log.txt 内容:Line 1
# 追加内容
echo "Line 2" >> log.txt # log.txt 内容:Line 1\nLine 2
三、awk
工具
awk
是一个强大的文本处理工具,常用于按列处理数据。
1. 基础用法
命令 | 功能说明 |
---|---|
awk '{print $1}' | 打印每行的第一列 |
awk -F':' '{print $3}' | 使用冒号 : 作为列分隔符,打印第三列 |
示例文件 data.txt
:
Alice:25:Engineer
Bob:30:Doctor
命令示例:
awk -F':' '{print "Name:", $1, "Age:", $2}' data.txt
输出:
Name: Alice Age: 25
Name: Bob Age: 30
2. 结合备份脚本中的用法
在之前备份脚本的示例中,使用 awk
从文件名中提取日期:
find ... | awk -F_ '{print $2}' | awk -F. '{print $1}'
- 文件名示例:
mysql_20231015.sql
- 第一次
awk
分割:mysql
和20231015.sql
- 第二次
awk
分割:20231015
和sql
,最终提取20231015
3. 高级功能
功能 | 示例 | 说明 |
---|---|---|
条件过滤 | awk '$3 > 30 {print $0}' | 筛选第三列大于30的行 |
内置变量 | awk '{print NR, NF}' | NR 当前行号,NF 列数 |
计算 | awk '{sum += $1} END {print sum}' | 计算第一列的总和 |
四、总结
符号/工具 | 核心作用 | 典型场景 |
---|---|---|
$0 $1 $2 $3 | 获取脚本参数 | 脚本需要处理用户输入时 |
>> | 追加内容到文件 | 日志记录、持续写入数据 |
awk | 文本列处理 | 日志分析、数据提取、格式转换 |
掌握这些基础后,可以更高效地编写 Shell 脚本!